2011-01-05 8 views
6

Ich habe eine NSMutableDictionary jedes Element von denen ist ein anderes Wörterbuch. Was ist der beste Weg, um den Inhalt in einen anderen NSMutableDictionary zu kopieren? Ich habe versucht mit:Kopieren Sie den Inhalt eines NSMutableDictionary in ein anderes NSMutableDictionary?

firstDictionary = [NSMutableDictionary dictionaryWithDictionary:secondDictionary]; 

jedoch nicht sicher, ob dies der beste Weg, es zu tun ist.

+0

Als Minimum ist es das aussagekräftigste. Warum denkst du, dass es nicht das Beste ist? Brauchen Sie eine tiefe oder flache Kopie von Elementen? – Schultz9999

+0

Ich brauche eine tiefe Kopie der Elemente. – NSExplorer

+0

Tiefe Kopie bedeutet, dass Sie eine Kopie jedes einzelnen Feldes jedes Elements erstellen müssen (was wiederum bedeutet, dass die Felder der Felder tief kopiert werden usw.). Diese Funktionalität wird von keiner Auflistungsklasse bereitgestellt. Sie müssen sich selbst darum kümmern. – Schultz9999

Antwort

5

prüfen NSDictionary initWithDictionary:copyItems: Methode zur Freigabe vergessen.

Sie ermöglicht es tief Kopieren von Elementen durch Aufruf copyWithZone: Methode der Klasse des Artikels. Sie müssen sich darum kümmern, die Felder selbst innerhalb der Methode zu kopieren.

0

Was meinst du mit "am besten"?
Wie auch immer, ich hier einige Möglichkeiten aufgeführt:

  1. firstDictionary = [NSMutableDictionary dictionaryWithDictionary: secondDictionary];
  2. [[NSDictionary alloc] initWithDictionary: secondDictionary]; // später nicht
  3. mit tiefer Kopie
  4. mit flacher Kopie
10

Sie können auch zwischen wandelbar und nicht-veränderbaren Wörterbücher mit Kopie und mutableCopy springen.

- (void) someFunc:(NSMutableDictionary *)myDict { 
    NSDictionary *anotherDict = [myDict copy]; 
    NSMutableDictionary *yetAnotherDict = [anotherDict mutableCopy]; 
} 
0

zu NSCopying Protokoll Conform und auf jedes Objekt copyWithZone tun.

Wenn NSMutableDictionary ein anderes Wörterbuch enthält, die ein anderes Wörterbuch enthält ,, dann müssen Sie copyWithZone auf jedem Wörterbuch auf allen Ebenen zu tun.

Verwandte Themen