2009-11-18 40 views
0

假設擁有名稱和accountNo的類帳戶均爲NSStrings。我想按名稱或按帳號排序帳戶數組。這種排序應該是本地化的。是否可以使用Cocoa Touch中包含正確數字的本地化和字符串元素的自定義對象對數組進行排序?

如果我按照指南中所述使用NSSortDescriptors,我可以選擇將localizedCaseInsensitiveCompare:傳遞給Array,但數字排序不正確(100在99之前排序)。我還沒有找到一種方法來觸發選項NSNumericSearch進行搜索。 這意味着我必須使用sortedArrayUsingFunctions帶有鏈中每個類的函數。它允許我排序正確的數值,但這不是本地化和非常有用的。

如果你有答案,這兩個問題(與數控正確排序或與本地化和數字正確排序sortFunctions SortDescriptors),請提供給我兩個

感謝

回答

1

您可以創建一個不同的NSSortDescriptor每個屬性由你想排序。每個排序描述符可以使用不同的比較選擇器。您的字符串可以使用您的localizedCaseInsensitiveCompare:方法,並且您的號碼可以使用自定義排序選擇器,如compareNumeric:

然後,你可以增加一個類別NSString定義了一個名爲compareNumeric:方法做這個:

- (NSComparisonResult) compareNumeric:(id)other { 
    return [self compare:other options:NSNumericSearch]; 
} 
+0

喜戴夫, 不好意思的回答晚了,我偶然發現了這個問題,現在是第二次,我上次沒有真正解決它 - 我只決定只使用NSNumericSearch,因爲可見性更高。 其實你的例子並不完全符合要求:我的字符串都是數字和字符,如「123 Max」和「4 Steve」。使用localizedCaseInsensitiveCompare會先將Max排序,然後再將Steve排序。使用功能時,搜索是正確的,但沒有本地化。 我還沒有找到解決方案。但是,只要我有一個,我會提供它。 感謝您的回答 – maxbareis 2010-02-08 16:14:33

相關問題