![](/img/trans.png)
[英]Terminating app - 'NSInvalidArgumentException', reason: '-[NSCFString objectForKey:]: unrecognized selector sent to instance
[英]iOS: 'NSInvalidArgumentException', reason: '-[__NSCFString sortedArrayUsingFunction:context:]: unrecognized selector sent to instance.
尝试获取前10组键时出现以下崩溃信息。 这是引起问题的代码。
for (int i = 0; i < 10; i++) {
sortedArray = [ [answers allKeys][i] sortedArrayUsingFunction:sort context:nil];
}
但是,当我仅使用此sortedArray = [ [answers allKeys] sortedArrayUsingFunction:sort context:nil];
我没有崩溃。 有人可以帮我找出解决方法吗? 我只想要前10个键。
我只是在这里猜测,但我认为您想要这个。
NSArray *arr = [[answers allKeys] subarrayWithRange:NSMakeRange(0, 10)];
NSArray *sorted = [arr sortedArrayUsingFunction:sort context:nil];
不幸的是,这行不通,您将需要更改架构。 这就是为什么。
字典是无序的。 这意味着, allKeys
可以在任何时候以任何顺序返回。 尤其是在迭代的地方使用它的方式,这不太可能,但是有可能您将拥有一个由所有相同键填充的数组。 如果使用我上面提供的代码,您将获得10个键的排序数组。 尽管这些键是唯一的,但它们不会以任何顺序确定,并且应假定是随机的。
也许您需要在过滤掉数组之前对键进行排序? 可能看起来像这样:
NSArray *sorted = [[answers allKeys] sortedArrayUsingFunction:sort context:nil];
NSArray *filtered = [sorted subarrayWithRange:NSMakeRange(0, 10)];
由于[answers allkeys][i]
返回NSString,您将崩溃。
也许您想要做的事情可以像这样完成:
NSArray* sortedArray = [[answers allKeys] sortedArrayUsingFunction:sort context:nil];
NSArray* sorted1st10 = [sortedArray subarrayWithRange:NSMakeRange(0, 10)];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.