Сортировка NSArray с использованием локализованных значений словаря

Я могу легко отсортировать массив словарей, используя дескриптор сортировки следующим образом:

    NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"name"  ascending:YES];

Но я заполняю таблицу локализованными строковыми значениями, что означает, что сортировка больше не является правильной на этом языке.

Помимо перестройки массива словарей с локализованными значениями, есть ли способ настроить дескриптор сортировки для этого?

Я хотел бы сохранить неизменные словари на родном языке, чтобы избежать глубокого копирования и работы с изменяемыми элементами. Эти словари являются производными от представления JSON и могут углубиться.

1 ответ

Вместо этого вы можете использовать этот метод:

- (id)initWithKey:(NSString *)key ascending:(BOOL)ascending comparator:(NSComparator)cmptr;

В блоке компаратора вы получаете локализованный ключ двух словарей и сравниваете их:

NSComparator comparator= ^NSComparisonResult (id dict1, id dict2)
{
    NSString* str1=[dict1 objectForKey: @"name"];
    NSString* str2=[dict2 objectForKey: @"name"];
    NSString* localizedStr1= NSLocalizedString(str1,str1);
    NSString* localizedStr2= NSLocalizedString(str2, str2);
    return [localizedStr1 compare: localizedStr2];
};
Другие вопросы по тегам