Сортировка 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];
};