6

私の現在の実装では、デリゲート メソッド内でUISearchBarController使用して、入力を開始したときに name プロパティに基づいて関連するオブジェクトを結果に返します。[NSString compare:]filterContentForSearchText:scope:UITableView

これまでのところ、これは英語と韓国語でうまく機能しますが、私ができるようにしたいのは、NSStringの定義された文字クラスター内での検索です。これは、韓国語を含む一握りの言語にのみ適用されます。

英語でcompare:は、文字を入力するたびに新しい結果が返されますが、韓国語では、認識された書記素クラスターを完了すると結果が生成されます。音節を構成する個々の要素を介して、韓国語のオブジェクト名プロパティを検索できるようにしたいと考えています。

これにアプローチする方法について誰かが光を当てることができますか? UTF16文字を手動で検索するか、下位レベルのクラスを利用することと関係があると確信しています。

乾杯!

うまくいかない具体的な例を次に示します。

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

の有無にかかわらず、結果は常に NSNotFounddecomposedStringWithCanonicalMappingです。

何か案は?

4

2 に答える 2

2

私は専門家ではありませんが、あなたが望むものに対する明確な解決策を見つけることはほとんどないと思います. 韓国語の文字の Unicode 値とそれを構成する書記素との間には何の関係もないようです。

たとえば、"이" は \uc774 で、"ㅣ" は \u3163 です。NSString の観点から見ると、それらは互いに特定の関係を持たない 2 つの異なる文字にすぎません。

文字とその書記素の間の明示的なマッピングを見つけるか作成し、このマッピングを参照する独自の検索関数を作成する必要があると思います。

それに関しては、 Unicode韓国語に関するこの非常に長いページが役立ちます。文字の番号付け方法とその構成要素の間の構造化された関係を示唆するすべての文字の表があります。

于 2010-02-03T07:58:21.703 に答える
1

NSLiteralStringを使用compare:optionsする場合、書記素に関係なく、文字ごと、つまり Unicode コード ポイントを比較する必要があります。のデフォルトの動作はcompare:、オプションを使用しないことです。を使用- decomposedStringWithCanonicalMappingして入力文字列の Unicode バイトを取得できますが、それが とどのように相互作用するかはわかりませんcompare:

于 2010-02-02T17:06:55.780 に答える