2009-11-18 2 views
0

Предполагается, что у вас есть учетная запись класса с именем и учетной записьюНо как NSStrings. Я хочу сортировать массив учетных записей либо по имени, либо по учетной записи. Сортировка должна выполняться локализованной.Можно ли сортировать массивы с пользовательскими объектами, содержащими элементы String, локализованные AND с правильными цифрами в Cocoa Touch?

Если я использую NSSortDescriptors, как описано в руководствах у меня есть возможность передать localizedCaseInsensitiveCompare: в массив, но цифры не сортируются правильно (100 сортируется до того 99). Я не нашел способ запустить опцию NSNumericSearch для поиска. Это означает, что я должен использовать sortedArrayUsingFunctions с функцией в каждом классе по цепочке. Это позволяет мне сортировать правильные числовые значения, но это не является локализованным и очень функциональным.

Если у вас есть ответы на оба вопрос (SortDescriptors с Численно правильным родом или sortFunctions с локализованными и числовыми правильными родами), пожалуйста, предоставить мне как

Благодаря

ответ

1

Вы можете создавать различные NSSortDescriptor для каждого свойства, по которым вы хотите сортировать. Каждый дескриптор сортировки может использовать другой селектор сравнения. Ваши строки могут использовать ваш метод localizedCaseInsensitiveCompare:, и ваши номера могут использовать настраиваемый селектор сортировки, что-то вроде compareNumeric:.

Тогда вы можете просто добавить категорию NSString, который определяет метод, называемый compareNumeric:, который делает это:

- (NSComparisonResult) compareNumeric:(id)other { 
    return [self compare:other options:NSNumericSearch]; 
} 
+0

Привет Дэйв, извините за поздний ответ, я наткнулся на эту проблему теперь уже во второй раз , Я на самом деле не решил его в последний раз - я решил использовать только NSNumericSearch, потому что видимость выше. На самом деле ваш пример не полностью соответствует требованиям: у меня есть строки с номерами и символами типа «123 Max» и «4 Steve». Используя localizedCaseInsensitiveCompare, они сортировали бы их сначала Макс и Стив. При использовании функций поиск правильный, но не локализованный. Я еще не нашел решение. Но как только у меня будет один, я его предоставил. Спасибо за ответ – maxbareis