尝试获取前10组密钥时出现以下崩溃。以下是导致问题的代码。
for (int i = 0; i < 10; i++) {
sortedArray = [ [answers allKeys][i] sortedArrayUsingFunction:sort context:nil];
}
但是,当我使用这个sortedArray = [ [answers allKeys] sortedArrayUsingFunction:sort context:nil];
时,我不会崩溃。有人可以帮我弄清楚如何解决这个问题吗?我只想要前10个键。
答案 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)];