Objective-c Норвежские алфавиты, NSArray sortedArrayUsingSelector: выпуск - PullRequest
1 голос
/ 19 октября 2011

Я прочитал http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Collections/Articles/Arrays.html%23//apple_ref/doc/uid/20000132-SW5

Но я не нашел решения своей проблемы.

Я написал:

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

показывает отсортированный порядок A-Z с Æ и Å среди A, Ø среди O. Предполагается, что это A-Z-Æ-Ø-Å, поскольку я использовал localized .

Ответы [ 2 ]

4 голосов
/ 19 октября 2011

Переопределение языка пользователя для всего приложения, как правило, не считается хорошим способом навязывания локали для конкретной операции, поскольку предпочтения пользователя должны определять способ сортировки данных. Если, например, у вас есть языковой класс или иная намеренно-двухязыковая программа), вам может оказаться полезным переопределить порядок сортировки только для определенных элементов программы. Хотя это немного сложнее, если вам нужно убедиться, что конкретные строки всегда сортируются в зависимости от конкретной локали, вы должны использовать длинную форму сравнения:

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

Вы можете получить языковой стандарт для норвежского языка, позвонив по телефону:

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 голосов
/ 19 октября 2011

Я решил это, вставив эту строку в -viewDidLoad:

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObject:@"no"] forKey:@"AppleLanguages"];
...