0

我有财产:

@property NSMutableArray *fieldsArray;
@synthesize fieldsArray;

在方法中,我尝试从这个数组中获取一些东西:

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag{
    NSInteger firstBallIndex = [self.fieldsArray indexOfObject:self.firstBall];
}

但后来我得到错误:

NSRangeException',原因:' * -[__NSArrayM objectAtIndex:]:索引 2147483647 超出范围 [0 .. 35]'

所以数组是不可访问的。

怎么做才看得见?

4

2 回答 2

1

该数组是可访问的,只是您尝试传递的索引超出了界限,可能是因为该数字为负数。

该指数2147483647看起来像一个负 1 被重新解释为一个正数。firstBallIndex在调用该objectAtIndex:方法之前,请确保它介于 0 和 35 之间。

由于您使用该indexOfObject:方法在 中查找对象NSArray,因此请确保您的对象正确实现该isEqual:方法。否则,NSArray将无法找到您的自定义对象,除非您将确切的实例传递给它。

于 2013-05-05T13:13:02.217 回答
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.
于 2013-05-05T13:13:39.207 回答