我试图将我的NSDictionary中的所有键的数组放入一个数组中,并使用localizedCaseInsensitiveCompare
进行排序。我第一次尝试做:
NSArray *test = [myDict keysSortedByValueUsingSelector@selector(localizedCaseInsensitiveCompare:)]];
我一直在NSCFNumber localizedCaseInsensitiveCompare:]: unrecognized selector
。我仔细检查了,我的所有2个键(现在都是字符串)。
我不得不切换到让它发挥作用:
NSArray *items = @[[[languages allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]];
为什么?!
谢谢!
答案 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
作为值。