0

UItableView検索では、以下のコードを使用して、セルコンテンツに入力されたテキストを検索しています。

NSComparisonResult result = [eachCellContent compare:searchText options:NSDiacriticInsensitiveSearch|NSCaseInsensitiveSearch range:NSMakeRange(0, [searchText length])];

これは正常に機能しています。しかし、これは韓国語のテキストでは機能しません。

例:セルテキストの1つが「소」であるとします。//この2つの文字ㅅとㅗを入力してこの組み合わせを取得します。ㅅのみを入力すると、compareメソッドが機能しないため、「소」が表示されません。(ㅅとㅗの両方を入力すると機能します)

ただし、上記の例はAddressBookアプリケーションでうまく機能しています。

これをサポートする他の比較方法はありますか?(このNSDiacriticInsensitiveSearch | NSCaseInsensitiveSearchも必要です)

読んでくれてありがとう。

4

1 に答える 1

2

あなたはを使用して文字列を正規化することを試みることができます

NSString *normalizedContent = [eachCellContent decomposedStringWithCanonicalMapping];
NSString *normalizedSearch = [searchText decomposedStringWithCanonicalMapping];

次に、これらを比較します。


更新:次のアルゴリズムが私のテストプロジェクトで機能しました:

NSString *eachCellContent = @"소";
NSString *searchText = @"ㅅ";

NSString *normalizedContent = [eachCellContent decomposedStringWithCanonicalMapping];
NSString *normalizedSearch = [searchText decomposedStringWithCanonicalMapping];

NSComparisonResult result = [normalizedContent compare:normalizedSearch
                                               options:NSDiacriticInsensitiveSearch|NSCaseInsensitiveSearch
                                                 range:NSMakeRange(0, [normalizedSearch length])
                                                locale:[NSLocale currentLocale]];
if (result == NSOrderedSame) {
    NSLog(@"same");
}
// Output: same

Unicode文字を分解することに加えて、「トリック」はローカライズされた比較を使用することでした。

于 2012-12-17T10:52:30.443 に答える