1

我不明白发生了什么事。如您所见,我有一个包含 107 个对象的数组。当我尝试仅将 10 个对象从中复制到另一个数组时,我收到此错误。(如果我输入像 3,8 这样的数字,它会正常工作)

    int count = [myJson count];
    NSLog(@"count: %d",count);
    resultsArray = [myJson objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(60, 70)]];

...

[53269:11303] count: 107
[53269:11303] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSArray objectsAtIndexes:]: index 129 in index set beyond bounds [0 .. 106]'
4

5 回答 5

7

NSMakeRange(i,l)。i 代表索引,l 代表长度。NSMakeRange(60, 70) 表示从 60 索引到下 70 个元素的对象。

于 2013-06-12T09:30:54.787 回答
2

如果你想要 10 个对象,那么你必须将范围设置为

NSMakeRange(60, 10)

这将使对象从 60 变为 79。

于 2013-06-12T09:30:39.053 回答
0

NSMakeRange有两个参数,但它们不是“开始”和“结束”,它们是“位置”和“长度”......

NSMakeRange(60, 70)60to的范围也是如此130,它超出了 107 个元素的数组的范围。

要解决此问题,请NSMakeRange(60, 10)改用。

于 2013-06-12T09:30:55.587 回答
0

您正在尝试从索引 60 到 70 多个元素访问元素。所以在这种情况下,您会收到此错误。

    int count = [myJson count];
    NSLog(@"count: %d",count);
    resultsArray = [myJson objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(60, 10)]];
于 2013-06-12T09:30:57.303 回答
0
NSMakeRange(60, 70);

上面的语句将从第 60 个位置开始获取 70 个元素,你的数组中应该有 60+70 = 130 或更多的 130 个元素。

所以如果你想要从 60 到 70 的元素,那么使用以下

resultsArray = [myJson objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(60, 10)]];
于 2013-06-12T09:41:38.423 回答