index使用objectsAtIndexes设置超出边界

时间:2013-06-12 09:25:51

标签: ios objective-c nsarray

我不明白发生了什么。如你所见,我有一个包含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]'

5 个答案:

答案 0 :(得分:7)

NSMakeRange(I,L)。我是索引而l是长度。  NSMakeRange(60,70)表示从60索引到下70个元素的对象。

答案 1 :(得分:2)

如果您想要10个对象,则必须将范围设置为

NSMakeRange(60, 10)

这将使对象从60到79。

答案 2 :(得分:0)

NSMakeRange有两个参数,但它们不是'start'和'end',它们是'location'和'length'......

所以NSMakeRange(60, 70)是从60130的范围,它超出了107个元素数组的范围。

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

答案 3 :(得分:0)

您正在尝试访问索引60到70多个元素的元素。因此,在这种情况下,您将收到此错误。

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

答案 4 :(得分:0)

NSMakeRange(60, 70);

上面的语句将从第60个位置开始获取70个元素 通过这种逻辑,你的阵列中应该有60 + 70 = 130或更多130个元素。

所以如果您想要60到70之间的元素,那么请使用以下

resultsArray = [myJson objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(60, 10)]];