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?
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.
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.
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.
Der Compiler wurde nicht überprüft. Als Algorithmus lesen
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).
Tags und Links objective-c ios nsarray recursion nsdictionary