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];