0

我正在尝试将 NSDictionary 中的所有键的数组放入一个数组中,并使用localizedCaseInsensitiveCompare. 我首先尝试做:

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

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

我不得不切换到做才能让它工作:

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

这是为什么?!

谢谢!

4

3 回答 3

2

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

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

这种变体排序(来自文档):

返回字典键的数组,如果字典按其值排序,则按照它们的顺序。

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

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

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

于 2013-07-10T11:41:12.997 回答
0

keysSortedby **Value** usingSelector...

于 2013-07-10T11:36:00.420 回答
0

因为是keysSortedBy**Value**UsingSelector,这就是你得到NSNumber异常的原因,因为是按值排序,而不是按键排序,你有NSNumbers作为值。

于 2013-07-10T11:36:22.227 回答