Wie durchläuft man eine verschachtelte Hierarchie von NSDictionaries und NSArrays und konvertiert alle in veränderbare Kopien?

8

Ich habe ein NSDictionary , das Instanzen vieler verschiedener Objekttypen enthält ( NSArrays , NSDictionaries , NSStrings , NSNumbers usw.). Viele der NSDictionaries und NSStrings haben ihre eigenen verschachtelten NSDictionaries und NSArrays .

Wie kann ich die gesamte Hierarchie von oben nach unten durchlaufen und alle Instanzen von NSDictionaries und NSArrays in NSMutableDictionaries bzw. NSMutableArrays konvertieren?

Gibt es irgendwelche einfachen "rekursiv machbaren Kopien" -Funktion, die mir nicht bekannt sind? Wenn nicht, muss ich nur wiederholen Schleife und wiederholen Sie die Prüfung? Kann ich einfach ersetzen, wie ich gehe oder habe ich die gesamte Hierarchie neu erstellen?

    
zakdances 23.03.2013, 14:05
quelle

4 Antworten

18

Die folgende Methode erstellt eine verschachtelte (tief) veränderbare Kopie verschachtelter Arrays, Wörterbücher und Mengen. Es kann auch verwendet werden, um veränderbare Kopien von Nicht-Sammlungsobjekten innerhalb der Hierarchie zu erstellen, z. B. Strings.

%Vor%

Benutze es wie

%Vor%

(Dictionary-Schlüssel werden nicht kopiert, nur die Werte).

Ich bin mir ziemlich sicher, dass ich sowas auf SO gesehen habe, aber ich kann es jetzt nicht finden.

    
Martin R 23.03.2013, 14:58
quelle
2

Während die Antwort von Anoop in Ordnung ist (ich denke, ich habe sie auch nicht kompiliert), können Sie, wenn Ihre Instanzenhierarchie tatsächlich eine Eigenschaftsliste ist, NSPropertyListSerialization , um ein Plist mit veränderbaren Containern und / oder Blattknoten zu deserialisieren.

Dies würde sich auf weniger Codezeilen reduzieren und wäre wahrscheinlich schneller als ein manueller Abstieg durch den Objektgraphen, aber diese Lösung macht nur dann Sinn, wenn Sie den Plist von irgendwo deserialisieren.

    
bbum 23.03.2013 14:58
quelle
1

Für das äußere NSDictionary wird dies für 1-Level-Down erstellt.

Sie müssen dies in einer Methode aufrufen und dann alle dict und array aufrufen.

%Vor%

Der Compiler wurde nicht überprüft. Als Algorithmus lesen

    
Anoop Vaidya 23.03.2013 14:12
quelle
1

Wenn Sie eine Betriebssystemmethode verwendet haben, um das Wörterbuch zu erstellen: Diese Methoden haben oft einen Parameter, mit dem Sie änderbare Objekte erstellen können. Die JSON-Serialiser-Klasse verfügt beispielsweise über Flags, um alle Wörterbücher und Arrays veränderbar zu machen und um alle NSString-Objekte veränderbar zu machen (NSNumber und NSNull sind niemals veränderbar).

    
gnasher729 17.02.2014 17:11
quelle