2012-02-07 8 views
0

私は5つのオブジェクトを持つNSMutableArrayを持っています。私はある条件が満たされたときに2つのオブジェクトを削除したい。しかし、それは私にエラーを与えています----- *キャッチされない例外 'NSRangeException'、理由: '* - [NSMutableArray objectAtIndex:]:境界3を超えてインデックス3を終了しているアプリ' ここにあります私のコードnsmutablearrayから2つのオブジェクトを削除する

-(IBAction)buttonPressed1:(id)sender{ 
for (int i = 0; i < [objectArray1 count]; i++) { 

    if ([[objectArray1 objectAtIndex:3] isEqualToString:@"xyz"]) 
    { 

     NSMutableIndexSet *indexes = [NSMutableIndexSet indexSetWithIndex:3]; 
     [indexes addIndex:4]; 
     [objectArray1 removeObjectsAtIndexes:indexes]; 
     NSLog(@"Hello %@",objectArray1); 
    } 
} 

私は{}の状態で削除してもうまくいきます。どんな助けもありがとう。

+1

あなたの配列は、十分なオブジェクトが含まれていませんか?問題は5つのオブジェクトが予想されていることであり、それらを削除したいときに配列内にすべて存在するわけではありません。 –

+0

私の配列には5つのオブジェクトが含まれています。 – NoviceDeveloper

答えて

4

ここでやっているように、インデックス3と4のオブジェクトを削除したい場合は、ループ内で実行しないでください。あなたは5つのオブジェクトからなる配列をとり、そのループの中で最後の2つのオブジェクトを最初に削除して、配列に3つのオブジェクトを残しています。次回は、配列インデックス3のアイテムについて同じチェックを実行しています。削除したため、配列にはそのインデックスがありません。

+0

ありがとう@ティム,,ロジックを逃した.. :) – NoviceDeveloper

0

あなたはループを4回過ぎているようです。
条件が真である場合、条件コードは4回実行されます。
インデックス4を作成します。
削除します。
2回目を取り外すとクラッシュします。

私はあなたが何をしたいのかを正しく理解している場合、これはコードです:あなたがクラッシュを取得なぜあなたは不思議に思っている理由

if ([[objectArray1 objectAtIndex:3] isEqualToString:@"xyz"] && 
    objectArray1.count == 5) { 
    NSMutableIndexSet *indexes = [NSMutableIndexSet indexSetWithIndex:3]; 
    [indexes addIndex:4]; 
    [objectArray1 removeObjectsAtIndexes:indexes]; 
    //less code: 
    //[objectArray1 removeLastObject]; 
    //[objectArray1 removeLastObject];  
} 
関連する問題