0

2 つのNSMutableArrays があり、特定のオブジェクト フォーム 1 配列を、既にコードを記述した他の配列に配置したいのですが、機能せず、次のエラーが表示 されます: [__NSArrayM objectAtIndex:]: index 296 beyond bounds [0 .. 295]' * First throw call stack: (0x1c9a012 0x10d7e7e 0x1c3c0b4 0x2f04 0xb20b90 0x1c59376 0x1c58e06 0x1c40a82 0x1c3ff44 0x1c3fe1b 0x1bf47e3 0x1bf4668 0x1f65c 0x252d 0x2455) libc++abi.dylib: terminate called throwing例外

viewdidload での初期化:

arrayLine1 =[[NSMutableArray alloc] initWithCapacity:80000];
    arrayLine1a =[[NSMutableArray alloc] initWithCapacity:70000];
    line1tagzahl=0;
    line1tagzahl2=0;

引き渡しコード:

for (int a=0; a<10; ) {

            [arrayLine1a insertObject:[arrayLine1 objectAtIndex:line1tagzahl2] atIndex:line1tagzahl2];

            line1tagzahl2=line1tagzahl2+1;
            a=a+1;
        }

配列にオブジェクトを作成する関数(この関数は非常に高速かつ頻繁に呼び出されます):

for (float a=0; a<0.8; ) {
            UIImageView *line1 =[[UIImageView alloc] initWithFrame:CGRectMake(Startpoint1.center.x-(w/2),Startpoint1.center.y-kurve1yf+a,w,h)];
            line1.image=[UIImage imageNamed:@"Unbenannt"];
            line1.tag=line1tagzahl;
            [self.view addSubview:line1];
            [arrayLine1 insertObject:line1 atIndex:line1tagzahl];
            line1tagzahl=line1tagzahl+1;
            a=a+0.1;
        }

今、あなたはより多くの情報を持っているはずです

4

4 に答える 4

0

-addObjectsFromArray:NSMutableArray クラスのデフォルト メソッドの使用に問題はありますか?

- (void)serverGotResponse:(NSArray *)objects {
  [_myMutableArray addObjectsFromArray:objects];
}
于 2013-01-31T19:33:20.463 に答える
0

あなたが尋ねると、array2に10を超えるオブジェクトがあります

あなたが投稿したエラーメッセージを読んでいないようです。配列には 296 個のオブジェクトがあります。しかし、単に配列をコピーしたいだけなら、なぜ...えっと...コピーしないのでしょうか?

NSMutableArray *secondArray = [firstArray mutableCopy];
于 2013-01-31T19:31:08.243 に答える
0

範囲外の例外を防ぐには、次のcountプロパティを使用する必要があります。

while (i < array.count) {
   // do something ..
   i++;
}

すべてのオブジェクトをコピーする場合は、配列全体をコピーできます:
array2 =[array1 copy]

于 2013-01-31T19:44:25.747 に答える
-1

最初の 10 個のオブジェクトを追加しようとしていますが、範囲外に出た最初のインデックスであるインデックス 296 で例外がスローされました。

何らかの理由であなたのwhile状態が適切に機能していないので、そこから探し始めることをお勧めします

を使用することもお勧めします。for実際には、潜在的な無限ループよりも単純で簡単です

for (int a = 0; a < 10; a++) {
    [array1 insertObject:[array2 objectAtIndex:a] atIndex:a];
}
于 2013-01-31T19:34:22.487 に答える