2011-07-11 7 views
0

すべて、NSMutableArray removeObjectAtIndexしかし、私は下に移動する必要があります

私はNSMutableArrayに格納されている文字列を持っています。特定の条件がコードの他の場所で満たされると、NSMutableArray(read、objectAtIndex:0)のFIRSTであるオブジェクトが削除されます。削除された後、私はすべてをインデックスの下にシフトする必要があります。ここに私の例があります:

/* 
    Index/Value 
    0 - one 
    1 - two 
    2 - three 
    3 - four 
    4 - five 
    5 - six 
    6 - seven 
*/ 
//removes object... 
[mArray removeObjectAtIndex:0]; 
//I am missing something here... 


//I want the value of the array to be as follows: 
/* 
    Index/Value 
    0 - two 
    1 - three 
    2 - four 
    3 - five 
    4 - six 
    5 - seven 
*/ 

私は何が欠けていますか?

編集:NSMutableArrayはNSUserDefaultsに格納されます。これが働かない原因になるのでしょうか?

EDIT2:NSUserDefaultsに格納されているため、不変に変更されます。それを行う正しい方法について受け入れられた答えを確認してください。詳細はこちら:crashes my app [NSMutableArray1 removeAllObjects] iphone sdk

答えて

6

私が正しくあなたの問題を理解していれば、あなたはNSUserDefaultsNSMutableArrayを格納していて、NSUserDefaultsからそれをロードするときに変異させるしようとすると、それはエラーがスローされますか?

あなたがNSUserDefaultsから配列を取得する際には、インスタンスNSArrayないNSMutableArrayになりますので、これはそれゆえ、あなたがで動作するようにNSMutableArrayのインスタンスを作成する必要があります。

NSMutableArray *mArray = [[NSMutableArray alloc] initWithArray:myArrayFromNSUserDefaults]; 
+0

これは完全に働いた。私はまた、後で停止するかもしれない人たちのためにここで答えを見つけました:http://stackoverflow.com/questions/3955969/crashes-my-app-nsmutablearray1-removeallobjects-iphone-sdk – Baub

7

あなたは何も欠けていません。インデックスは、インデックス0でオブジェクトを削除した後のものとまったく同じになります。

+1

+1オズが言ったように、それは自動的にあなたのために行います。 :) –

+0

私はこれが当てはまると思ったが、「***キャッチされていない例外 'NSInternalInconsistencyException'のためアプリを終了しています。理由: ' - [__ NSCFArray removeObjectAtIndex:]:メソッドを不変オブジェクトに送信しました'」 私は自分のコードのどこかに何かが間違っている。 – Baub

+0

これは、可変配列を持たないためです。 mArrayは、新しい配列を作成するか、既存の配列に保持されたコピーを返すmutableCopyを呼び出すことによってNSMutableArrayである必要があります。 – Joe

0

これはうまくいくはずです。このようなことをしていますか?

NSMutableArray *mArray = [[NSMutableArray alloc]init]; 
    [mArray addObject:@"one"]; 
    [mArray addObject:@"two"]; 
    [mArray addObject:@"three"]; 

    [mArray removeObjectAtIndex:0]; 

    NSLog(@"mArray at 0: %@",[mArray objectAtIndex:0]); 
関連する問題