NSDictionary allKeys然后使用选择器vs keysSortedByValueUsingSelector进行排序

时间:2013-07-10 11:30:46

标签: ios objective-c ios6 nsdictionary

我试图将我的NSDictionary中的所有键的数组放入一个数组中,并使用localizedCaseInsensitiveCompare进行排序。我第一次尝试做:

NSArray *test = [myDict keysSortedByValueUsingSelector@selector(localizedCaseInsensitiveCompare:)]]; 

我一直在NSCFNumber localizedCaseInsensitiveCompare:]: unrecognized selector。我仔细检查了,我的所有2个键(现在都是字符串)。

我不得不切换到让它发挥作用:

NSArray *items = @[[[languages allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]];

为什么?!

谢谢!

3 个答案:

答案 0 :(得分:2)

在这两种情况下有不同的排序。

NSArray *test = [myDict keysSortedByValueUsingSelector@selector(localizedCaseInsensitiveCompare:)]];

此变体排序(来自docs):

  

按照字典按其值排序的顺序,返回字典键的数组。

您尝试获取一个数组,首先使用选择器对值进行排序,然后获取键列表。我想,你的字典的对象不是NSString,他们对这个选择器一无所知。

NSArray *items = @[[[languages allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]];

这里你做得对。您获得了键数组(NSString),然后使用右选择器对其进行排序。

答案 1 :(得分:0)

keysSortedby **Value** usingSelector...

答案 2 :(得分:0)

因为是keysSortedBy**Value**UsingSelector,这就是为什么会出现NSNumber异常,因为按值排序,而不是按键排序,因此您需要NSNumbers作为值。