我是一個noob,我很抱歉,因爲這個問題真的很愚蠢。我有一個NSArray,它包含俄語NSDictionaries中的UITableView行的標題,我需要按字母順序對這些標題進行排序。我該怎麼做?按俄文字母順序對UITableView排序
請幫助我。
提前致謝!
我是一個noob,我很抱歉,因爲這個問題真的很愚蠢。我有一個NSArray,它包含俄語NSDictionaries中的UITableView行的標題,我需要按字母順序對這些標題進行排序。我該怎麼做?按俄文字母順序對UITableView排序
請幫助我。
提前致謝!
在iOS 4.0及更高版本,您可以使用一個排序描述符。假設title
下,你的標題字符串存儲在字典的關鍵是:
NSArray *sortedArray = [myArray sortedArrayUsingDescriptors:
[NSArray arrayWithObject:
[NSSortDescriptor sortDescriptorWithKey:@"title"
ascending:YES
selector:@selector(localizedCaseInsensitiveCompare:)]]];
另一種選擇是使用基於塊的一種排序方法:如果你需要你的應用程序上運行
NSArray *sortedArray = [myArray sortedArrayUsingComparator:^(id obj1, id obj2) {
NSString *string1 = [(NSDictionary *)obj1 objectForKey:@"title"];
NSString *string2 = [(NSDictionary *)obj2 objectForKey:@"title"];
return [string1 localizedCaseInsensitiveCompare:string2];
}];
3.1.3的iOS和更早,但是,您可以:
-sortedArrayUsingSelector:
,或-sortedArrayUsingFunction:context:
。在每種情況下,您的方法或函數的主體將與上面第二個示例中塊的主體基本相同。 NSArray class reference包含兩種技術的例子。
我認爲這將整理您的數組:
NSArray *sortedArray = [anArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
不幸的是,我得到一個錯誤:'NSInvalidArgumentException',原因:' - [__ NSCFDictionary localizedCaseInsensitiveCompare:]:無法識別的選擇發送到實例0x5f7f260' – KillaIce 2010-11-02 20:51:44
你確定你的NSArray包含NSStrings?您可能想要遍歷它,記錄每個字符串 - 只是爲了檢查。我曾經見過類似的問題,如果我記得正確的話,我是過度釋放數組的元素,然後嘗試訪問它們。 – westsider 2010-11-02 21:00:54
不,它不包含NSStrings,它包含帶有NSStrings的NSDictionaries它。對不起,也許我不清楚 – KillaIce 2010-11-02 21:04:19
謝謝!它適用於名稱是兩個不同單詞的標題。但是,如果有兩個單詞,並且第一個單詞相同,那麼應用程序崩潰:( – KillaIce 2010-11-02 22:01:50
真的?奇怪...崩潰發生在哪裏,在您的代碼或localizedCaseInsensitiveCompare中? – dwineman 2010-11-02 22:09:37
不,它發生在我的代碼中,雖然沒有排序一切工作正常。它崩潰在\t * NSDictionary * dictionary = [sortedArray objectAtIndex:indexPath.row]; *和控制檯顯示*由於未捕獲的異常'NSInvalidArgumentException'終止應用程序,原因:' - [NSCFString objectAtIndex: ]:無法識別的選擇器發送到實例0x6999e80'* – KillaIce 2010-11-02 22:18:20