2010-01-21 37 views
6

在我當前實現的UISearchBarController中,我使用filterContentForSearchText:scope:委託方法中的[NSString compare:]在開始輸入時將基於name屬性的相關對象返回到結果UITableView搜索或比較韓語中的字形羣集

到目前爲止,這在英語和韓語中都很出色,但我希望能夠做的是在NSString的定義字符集內進行搜索。這隻適用於一種語言,其中韓語是一種語言。

英文中,compare:會在您輸入的每個字母后返回新的結果,但在韓語中,一旦完成識別的字形羣集就會生成結果。我希望能夠通過構成音節的各個元素來搜索我的韓國對象名稱屬性。

任何人都可以闡明如何解決這個問題?我相信這與手動搜索UTF16字符或利用較低級別的類有關。

乾杯!

下面是隻是沒有工作一個具體的例子:

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

結果總是NSNotFound,有無decomposedStringWithCanonicalMapping

任何想法?

回答

2

我不是專家,但我認爲你不可能找到你想要的乾淨解決方案。韓文字符的Unicode值與其組成的字形之間似乎沒有任何關係。

例如「이」是\ uc774,「ㅣ」是\ u3163。從NSString的角度來看,它們只是兩個不同的角色,彼此沒有特定的關係。

我懷疑你將不得不在字符和他們的字形之間找到或創建一個明確的映射,然後編寫你自己的搜索函數來查詢這個映射。

This very long page on Unicode Korean可以幫助你,如果它涉及到。它具有所有字符的表格,表明字符被編號的方式與其組成部分之間的某種結構關係。

+0

勞倫斯,那個信息太棒了。有韓國的iPhone應用程序,似乎做我一直在嘗試;但我猜想我錯誤地認爲韓文是如何存儲在UTF8/16中的。 謝謝你的回答,它肯定爲我的查詢提供了一些信息。 – Jessedc 2010-02-04 01:05:04

+0

感謝您的幫助勞倫斯,我接受了您的答案;這是朝着正確方向邁出的一大步。 – Jessedc 2010-02-07 06:03:41

1

如果您使用的是帶有NSLiteralString的compare:options,則應該逐字符比較Unicode字符,而不考慮字形。 compare:的默認行爲是不使用選項。您可以使用- decomposedStringWithCanonicalMapping來獲取輸入字符串的Unicode字節,但我不確定這將如何與compare:交互。

+0

感謝您花時間回覆唐。你讓我今天玩了好一個小時。 我已經添加了一個具體的例子來說明我正在嘗試做什麼。 – Jessedc 2010-02-03 00:25:14