2010-11-02 73 views
2

我是一個noob,我很抱歉,因爲這個問題真的很愚蠢。我有一個NSArray,它包含俄語NSDictionaries中的UITableView行的標題,我需要按字母順序對這些標題進行排序。我該怎麼做?按俄文字母順序對UITableView排序

請幫助我。

提前致謝!

回答

1

在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和更早,但是,您可以:

  • 寫的比較方法作爲NSDictionary的一個類別,並把它傳遞給-sortedArrayUsingSelector:,或
  • 寫一個比較函數並將其傳遞給-sortedArrayUsingFunction:context:

在每種情況下,您的方法或函數的主體將與上面第二個示例中塊的主體基本相同。 NSArray class reference包含兩種技術的例子。

+0

謝謝!它適用於名稱是兩個不同單詞的標題。但是,如果有兩個單詞,並且第一個單詞相同,那麼應用程序崩潰:( – KillaIce 2010-11-02 22:01:50

+0

真的?奇怪...崩潰發生在哪裏,在您的代碼或localizedCaseInsensitiveCompare中? – dwineman 2010-11-02 22:09:37

+0

不,它發生在我的代碼中,雖然沒有排序一切工作正常。它崩潰在\t * NSDictionary * dictionary = [sortedArray objectAtIndex:indexPath.row]; *和控制檯顯示*由於未捕獲的異常'NSInvalidArgumentException'終止應用程序,原因:' - [NSCFString objectAtIndex: ]:無法識別的選擇器發送到實例0x6999e80'* – KillaIce 2010-11-02 22:18:20

0

我認爲這將整理您的數組:

NSArray *sortedArray = [anArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; 
+0

不幸的是,我得到一個錯誤:'NSInvalidArgumentException',原因:' - [__ NSCFDictionary localizedCaseInsensitiveCompare:]:無法識別的選擇發送到實例0x5f7f260' – KillaIce 2010-11-02 20:51:44

+0

你確定你的NSArray包含NSStrings?您可能想要遍歷它,記錄每個字符串 - 只是爲了檢查。我曾經見過類似的問題,如果我記得正確的話,我是過度釋放數組的元素,然後嘗試訪問它們。 – westsider 2010-11-02 21:00:54

+0

不,它不包含NSStrings,它包含帶有NSStrings的NSDictionaries它。對不起,也許我不清楚 – KillaIce 2010-11-02 21:04:19