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メソッドを呼び出す前に、 が 0 から 35 の間であることを確認してくださいobjectAtIndex:

メソッドを使用して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 に答える