繁体   English   中英

iOS:“ NSInvalidArgumentException”,原因:“-[__ NSCFString sortedArrayUsingFunction:context:]:无法识别的选择器已发送到实例。

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM