Можно ли сортировать массивы с помощью пользовательских объектов, содержащих локализованные элементы String И с правильными числами в Cocoa Touch? - PullRequest
0 голосов
/ 18 ноября 2009

Предполагается, что класс Account с именем и accountNo оба являются NSStrings. Я хочу отсортировать массив учетных записей по имени или по номеру учетной записи. Сортировка должна выполняться локально.

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

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

Спасибо

1 Ответ

1 голос
/ 18 ноября 2009

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

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

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