NSArray * sortedKeys = [[names allKeys] sortedArrayUsingSelector:@selector(compare:)];
Приведенный выше код возвращает отсортированный массив ключей словаря, используя предоставленный вами селектор. Селектор фактически является функцией, которая будет вызываться на объекте, который сортируется в вашем массиве. В этом случае ваш массив содержит строки, так и в реальной NSArray сортировки коды следующей будет происходить,
//...
[key1 compare:key2];
//..
Если вы прошли в другом селекторе позволяет сказать @selector (randomFunction :) затем в сортировочном коде следующий будет происшествие
//..
[key1 randomFunction:key2];
//..
Поскольку NSString не отвечает на селектор randomFunction, вы получите сообщение об ошибке. Если вы хотите создать свой собственный тип функции сравнения, вам нужно добавить категорию к классу, который содержит массив (в вашем случае категория - NSString).
Лучшим способом сортировки массива является использование оператора блока.
id mySort = ^(NSString * key1, NSString * key2){
return [key1 compare:key2];
};
NSArray * sortedKeys = [[names allKeys] sortedArrayUsingComparator:mySort];
Причина, по которой это лучший способ, заключается в сортировке любых объектов очень легко.
id mySort = ^(MyObject * obj1, MyObject * obj2){
return [obj1.title compare:obj2.title];
};
NSArray * sortedMyObjects = [myObjects sortedArrayUsingComparator:mySort];
+1 - хорошее объяснение – bryanmac