我有财产:
@property NSMutableArray *fieldsArray;
@synthesize fieldsArray;
在方法中我尝试从这个数组中得到一些东西:
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag{
NSInteger firstBallIndex = [self.fieldsArray indexOfObject:self.firstBall];
}
然后我得到错误:
NSRangeException',原因:' * - [__ NSArrayM objectAtIndex:]:index 2147483647超出界限[0 .. 35]'
因此无法访问数组。
如何看到它?
答案 0 :(得分:1)
数组是可访问的,只是您尝试传递的索引超出界限,可能是因为数字为负数。
索引2147483647
看似负面1重新解释为正数。在调用firstBallIndex
方法之前,请确保objectAtIndex:
介于0和35之间。
由于您使用indexOfObject:
方法在NSArray
中查找对象,因此请确保您的对象正确实现isEqual:
方法。否则,NSArray
将无法找到您的自定义对象,除非您将确切的实例传递给它。
答案 1 :(得分:1)
这与数组本身无关,而是与self.firstBall
的值无关。我最好的猜测是它是nil
,这会使firstBallIndex
NSNotFound
(2147483647
)。显然,2147483647
超出了数组的范围,然后引发了这个错误。
根据您的实施情况,您可以执行以下操作:
if (firstBallIndex != NSNotFound)
// which means that self.firstBall wasn't in your array in the first palce.
或
if ([self.fieldsArray containsObject:self.firstBall])
// which basically does the same, but in a more stylish way.