尝试执行以下操作:
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]'
有什么想法吗?
答案 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