2012-03-19 6 views
1

を削除して、私は可能な限り明確にしようとするでしょう:が他の辞書

  1. は、私が2 MutableDictionary私は同じNSMutableArrayのオブジェクトそれらの両方に追加
  2. 作成しますコードの他の部分で

    [self.myList setObject:tempC forKey:keyV]; 
    
    [self.listFiltered setObject:tempC forKey:keyV]; 
    
  3. 、私は1つを空にしたいので、私は実行します。

    [self.listFiltered objectForKey:keyV] removeAllObjects]; 
    

問題は、オブジェクトが両方のmutableDictionariesで削除されていることです。

+1

bcoz同じキーの両方の辞書を追加しています。 –

+0

だから、彼らはそれぞれコピーを持っていないのですか?どのように私はそれを作ることができます両方の異なるコピーを持っている? –

+0

両方に異なるキーを設定しています... –

答えて

2

同じNSNSMutableArrayが両方の辞書に追加されます。 1つの辞書や別の辞書を使ってアクセスするかどうかは関係ありませんが、同じNSMutableArrayインスタンスを操作することになります。

この問題を解決するには、各辞書に異なるNSMutableArrayインスタンスを保存する必要があります。これを行う最も簡単な方法は[NSMutableArray copy]です。これはshallow copyです。

最後に、名前がlistで終わる名前付け辞書は悪い習慣です。

+0

を見て、ありがとう! Btw、それらの名前をどうやってお勧めしますか? –

+0

'myDictionary'と' dictionaryFiltered'が気になります。辞書の長さが長すぎる場合、 'dict'は受け入れ可能な収縮で、' list'と同じ長さです。 – freespace

2

両方のオブジェクトが同じです...そのmutable配列へのポインタを両方の辞書に渡すだけで、一方を削除すると削除されます。必要なのは、その配列のコピーを辞書に保存することです。 ..これが役立つことを望む。

あなたはこのような配列を追加することができます。..は、2つの異なるオブジェクトがそこに格納されているこの方法では、これが最も最適化されたコードではない..です

NSMutableArray *newArrayOne = [[NSMutableArray alloc] initWithArray:tempC copyItems:YES]; 
[self.myList setObject:newArrayOne forKey:keyV]; 
[newArrayOne release]; 

NSMutableArray *newArrayTwo = [[NSMutableArray alloc] initWithArray:tempC copyItems:YES]; 
[self.listFiltered setObject:newArrayTwo forKey:keyV]; 
[newArrayTwo release]; 

(あなたは深いコピーをしたい私には思えます)。..実際に何が起こっているのかを理解させるだけです。

+0

私にそれの例を教えてもらえますか? –

+0

@ tonio.mg編集 –

2

他の辞書に配列をコピーする必要があります。 これについては、hereを参照してください。