Objective-C切片数组给出了索引超出范围的错误

时间:2014-04-09 11:25:06

标签: objective-c

尝试执行以下操作:

NSMutableArray *tmpArr = [_tweets subarrayWithRange:NSMakeRange(0, 10)];
_tweets = [[NSMutableArray alloc] init]; // added this in trial and error debugging
_tweets = tmpArr;

_tweets是一个NSMutableArray,我试图从中获取前10个对象。

但是,我收到以下错误:

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 157 beyond bounds [0 .. 9]'

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

错误发生在此代码之后的某个时刻。

你从_tweets开始,如你所说的NSMutableArray,其中大概有157个元素。

您从_tweets数组中获取前10个元素并将其分配给tmpArr,另一个NSMutableArray。

现在......你接受原始的_tweets数组,重新分配并重新初始化它(在给定以下行的情况下这是多余的。并设置_tweets指向相同的内存位置{ {1}}指向。

现在您有两个数组指针tmpArr_tweets。它们都指向完全相同的内存位置,并且在该内存位置放置一个带有10个元素的NSMutableArray - 最初在tmpArr中的前10个元素。

在执行此代码之后的某个时刻,您尝试访问这两个数组指针之一的第157个元素(同样指向同一个数组)。但最高指数为9,因此引起异常。抛出异常的代码行未发布在问题中。

答案 1 :(得分:0)

在尝试抓取子范围之前添加此权限:

NSLog("%ul", _tweets.length);
NSMutableArray *tmpArr = [_tweets subarrayWithRange:NSMakeRange(0, 10)];

然后,至少你会知道数组包含预期的元素数。

你可能还想在Xcode中启用guard malloc,因为它似乎可能会遇到内存/指针问题。 Xcode - scribble, guard edges and guard malloc