2011-10-18 34 views
1

我已閱讀 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Collections/Articles/Arrays.html%23//apple_ref/doc/uid/20000132-SW5Objective-C的挪威字母æ○,NSArray的sortedArrayUsingSelector:發行

但我沒有找到一個解決我的問題。

我寫道:

NSArray *sorted = [unsorted sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; 

顯示排定的順序AZ以A之間AE和A,O O. 中它應該是AZ-AE-O-Å,因爲我用本地化

回答

4

重寫用戶的語言爲整個應用程序通常不被認爲是給力的語言環境的特定行爲的好方法,因爲用戶的偏好應該決定數據的排序方式。例如,如果您有語言課程或其他有意識的雙語言課程),那麼您可能會發現,用戶只需爲程序的某些元素重寫排序順序就很有用。雖然這是一個有點更多的工作,如果你需要確保特定的字符串,以便總是排序爲特定的語言環境中,你應該使用的長形式比較:

- (NSComparisonResult)compare:(NSString *)aString options:(NSStringCompareOptions)mask range:(NSRange)range locale:(id)locale 

你可以得到的語言環境通過call挪威:

NSLocale *noLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"no_NO"] autorelease]; 

所以,你最終調用:

NSArray *sorted = [unsorted sortedArrayUsingComparator :^(id obj1, id obj2) { 
    NSRange theRange = NSMakeRange(0, [obj1 length]); 
    return [obj1 compare: obj2 options: NSCaseInsensitiveSearch range: theRange locale: noLocale]; 
}]; 

這不會設置程序的其餘部分的默認語言,但它會明確地使用特異性特定比較中的區域設置。

+0

這種方法有什麼作用?將en更改爲no?還是暫時?現在我沒有電腦,但明天我會查看你的密碼。感謝您花時間幫助我。 – wagashi

+0

我編輯了我的回覆,希望能夠提供一些說明。這使得區域「不」,僅用於特定的比較。 – gaige

+0

現在很清楚:)謝謝。 – wagashi

0

我解決它在-viewDidLoad插入該行:

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObject:@"no"] forKey:@"AppleLanguages"]; 
相關問題