2012-11-02 121 views
0

我完全不熟悉iPhone/OSX的開發,我試圖按照字母順序排列一個充滿對象的NSMutableArray,但是我失敗了。以Å或Ä開始的項目最後以A開始,而以Ö開始的項目以O開頭。我嘗試了不同的排序方法,我在這裏找到了Stackoverflow,但它們都不起作用(對於我最少)用數組排序數組

NSSortDescriptor* stationDescriptor = [[NSSortDescriptor alloc]initWithKey:@"name" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)]; 
    NSArray* descriptors = [NSArray arrayWithObject:stationDescriptor]; 
    [stations sortUsingDescriptors:descriptors]; 


    [stations sortUsingComparator:^NSComparisonResult(Station* obj1, Station* obj2){ 
     return [[obj1 name] localizedCaseInsensitiveCompare:[obj2 name]]; 
    }]; 

好的,進展!通過將模擬器上的語言更改爲瑞典語,我已成功地實現了這一目標,當手機設置爲英語時,有什麼方法可以獲得相同的結果?我知道在C#中,您可以在排序/比較字符串時發送對特定文化的引用。

/維克托

回答

3

望着文檔爲NSString給你答案。

您正在使用localizedCaseInsensitiveCompare:並且這種狀態的文檔

等等等等

請參見
- 比較:選項:範圍:區域:

所以跳到compare:options:range:locale:的文檔,你可以弄明白。你需要像

return [[obj1 name] compare:[obj2 name] 
        options:NSCaseInsensitiveSearch 
         range:NSMakeRange(0, [obj1 length]) 
        locale:whateverLocaleYouWant]; 
+0

感謝您的幫助! – Viktor

+0

不應該是NSMakeRange(0,[[obj1 name] length])? – oskob

+0

正是我在找什麼,我加了NSLocale * locale = [[NSLocale alloc] initWithLocaleIdentifier:@「nb_NO」]; 它開始爲我工作。 – york