6

在我当前的实现中,UISearchBarController[NSString compare:]filterContentForSearchText:scope:委托方法中使用基于它们的名称属性将相关对象返回到UITableView您开始输入的结果中。

到目前为止,这在英语和韩语中效果很好,但我想做的是在NSString's 定义的字符簇中进行搜索。这仅适用于少数几种语言,韩语就是其中之一。

在英语中,compare:在您输入每个字母后返回新结果,但在韩语中,一旦您完成识别的字素簇,就会生成结果。我希望能够通过构成音节的各个元素来搜索我的韩语对象名称属性。

任何人都可以阐明如何解决这个问题吗?我确信它与手动搜索 UTF16 字符或使用较低级别的类有关。

干杯!

这是一个不起作用的特定示例:

`NSString *string1 = @"이"; 
`NSString *string2 = @"ㅣ";
NSRange resultRange = [[string1 decomposedStringWithCanonicalMapping] rangeOfString:    [string2 decomposedStringWithCanonicalMapping] options:(NSLiteralSearch)];

结果总是 NSNotFound,有或没有decomposedStringWithCanonicalMapping.

有任何想法吗?

4

2 回答 2

2

我不是专家,但我认为你不太可能找到你想要的干净的解决方案。韩语字符的 Unicode 值与其组成的字素之间似乎没有任何关系。

例如“이”是\uc774,“ㅣ”是\u3163。从 NSString 的角度来看,它们只是两个不同的字符,彼此之间没有特定的关系。

我怀疑您将必须找到或创建字符与其字素之间的显式映射,然后编写您自己的搜索函数来查询此映射。

如果涉及到这一点,这个关于 Unicode Korean 的非常长的页面可以为您提供帮助。它有一个包含所有字符的表,表明字符编号方式与其组成部分之间存在某种结构化关系。

于 2010-02-03T07:58:21.703 回答
1

如果compare:options与 NSLiteralString 一起使用,它应该逐个字符比较,即 Unicode 代码点,而不考虑字素。的默认行为compare:是不使用任何选项。您可以- decomposedStringWithCanonicalMapping用来获取输入字符串的 Unicode 字节,但我不确定这将如何与compare:.

于 2010-02-02T17:06:55.780 回答