-1

最初のインデックスが以前に削除されたときに、インデックス0のNSMutableArrayにオブジェクトを追加するにはどうすればよいですか?insertObject動作しません :

キャッチされなかった例外'NSRangeException'が原因でアプリを終了しています。理由:' * -[__ NSArrayM removeObjectAtIndex:]:インデックス2が境界を超えています[0 .. 1] '

画面が右に移動したら、配列の最初のインデックス(もう表示されていません)を削除して、右に追加します。ただし、左に戻りたい場合は、以前に削除した画像を追加する必要があります(現在、インデックス2にありますが、画像は同じであるため、別の画像を追加するだけでも問題ありません)。addObject配列の最後にオブジェクトを追加すると、insertObjectはエラーをスローします...

これを修正する方法を知っていますか?

linesArray = [[NSMutableArray alloc] initWithObjects:lines1, lines2, lines3, nil];

//left direction : add the object at index 0
if (offsetParam >= offset1){
    CCSprite *temp = [[sprites objectAtIndex:1] retain];
    [sprites removeObjectAtIndex:2];
    [sprites insertObject:temp atIndex:0];//****CRASH HERE****
    temp.position = ccp(-offset1-spriteWidth, temp.position.y);
    [temp release];
    offset1 += spriteWidth;
}

ありがとう

4

3 に答える 3

1

その例外をもう少し詳しく読んだら

キャッチされなかった例外'NSRangeException'が原因でアプリを終了しています。理由:'*-[__ NSArrayM removeObjectAtIndex: ]:インデックス2が境界を超えています[0 .. 1] '

あなたはそれがあなたが言及したものの直前のラインの実際のクラッシュであることがわかるでしょう。この行は問題ありません:

[sprites insertObject:temp atIndex:0];//CRASH HERE****

クラッシュするのは前のものです:

[sprites removeObjectAtIndex:2];

2つのアイテム(インデックス0と1)を持つ配列があるように見えるので、インデックス2がないため、インデックス2を削除するとクラッシュします。

于 2012-08-13T05:21:29.617 に答える
1

インデックス2でオブジェクトを操作しようとしている前の行でクラッシュしています。エラーメッセージは、オブジェクトをインデックス2から削除しようとしていることを明確に示しています。投稿したのは行です

[sprites removeObjectAtIndex:2];

sprites配列には、思ったほど多くのオブジェクトがありません。

のインデックス0にはいつでも挿入できます。NSMutableArray空の配列、または任意の数のオブジェクトを含む配列に対して機能します。

于 2012-08-13T05:22:05.077 に答える
-1

initWithObjectsはnilで終了することに注意してください。つまり、メソッドが最初に遭遇するnilは、リストの最後のnilになります。あなたが投稿したコードに基づくと、私の勘では、lines3はnilであり、リストのサイズは2になり、

[sprites removeObjectAtIndex:2];

投稿したエラーメッセージで失敗する。デバッガーをチェックして、lines1、lines2、およびlines3がnilでないことを確認します。

于 2012-08-13T05:24:45.433 に答える