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

时间:2014-11-17 21:08:46

标签: ios objective-c iphone

尝试获取前10组密钥时出现以下崩溃。以下是导致问题的代码。

  for (int i = 0; i < 10; i++) {

        sortedArray = [ [answers allKeys][i] sortedArrayUsingFunction:sort context:nil];

        }

但是,当我使用这个sortedArray = [ [answers allKeys] sortedArrayUsingFunction:sort context:nil];时,我不会崩溃。有人可以帮我弄清楚如何解决这个问题吗?我只想要前10个键。

2 个答案:

答案 0 :(得分:2)

我只是在这里猜测,但我想你想要这个。

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)];

答案 1 :(得分:0)

您遇到了崩溃,因为[answers allkeys][i]正在返回 NSString

也许你想要做的事情可以这样完成:

NSArray* sortedArray = [[answers allKeys] sortedArrayUsingFunction:sort context:nil];
NSArray* sorted1st10 = [sortedArray subarrayWithRange:NSMakeRange(0, 10)];