В других ответах, приведенных здесь, упоминается использование @selector(localizedCaseInsensitiveCompare:)
. Это прекрасно работает для массива NSString, однако, если вы хотите расширить его на другой тип объекта и отсортировать эти объекты в соответствии со свойством name, вам следует сделать следующее: это вместо этого:
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
sortedArray=[anArray sortedArrayUsingDescriptors:@[sort]];
Ваши объекты будут отсортированы в соответствии с именем свойства этих объектов.
Если вы хотите, чтобы сортировка не учитывала регистр, вам нужно установить дескриптор следующим образом
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)];
Хорошо, если кто-нибудь прочитает это: лучший вариант - добавить четыре & nbsp;
на каждом дополнительном уровне отступа, казалось бы!
итак:
Я думаю, что если у вас есть что-то настолько структурированное и сложное, вы можете рассмотреть что-то другое, кроме одного раскрывающегося списка.
Спецификация HTML здесь действительно нарушена. Он должен разрешать вложенные группы optgroups и рекомендовать пользовательским агентам отображать их как вложенные меню. Вместо этого разрешен только один уровень optgroup . Однако они должны сказать по этому поводу следующее:
Примечание. Разработчикам сообщается, что будущие версии HTML могут расширить механизм группировки, чтобы разрешить вложенные группы (т. Е. Элементы OPTGROUP могут вкладываться). Это позволит авторам представить более богатую иерархию выбора.
И пользовательские агенты могут начать использовать подменю для рендеринга optgoups вместо отображения заголовков перед первым элементом option в optgroup, как сейчас.