无法访问animationDidStop方法中的合成属性

时间:2013-05-05 13:08:47

标签: objective-c core-animation

我有财产:

@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]'

因此无法访问数组。

如何看到它?

2 个答案:

答案 0 :(得分:1)

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

索引2147483647看似负面1重新解释为正数。在调用firstBallIndex方法之前,请确保objectAtIndex:介于0和35之间。

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

答案 1 :(得分:1)

这与数组本身无关,而是与self.firstBall的值无关。我最好的猜测是它是nil,这会使firstBallIndex NSNotFound2147483647)。显然,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.
相关问题