Ich habe versucht, zwei NSDictionaries für ein paar Stunden zu verschmelzen. Gesucht und gefunden, dass ich [NSMutableDictionary addEntriesFromDictionary:]
verwenden kann.
Aber ich bekomme den Fehler:
%Vor% Also heißt das, dass [areaAttributesM addEntriesFromDictionary:gpsAttributesM]
void
zurückgibt? Ist mein Verständnis richtig? Und warum ist es wieder leer?
Ja, Sie haben Recht. Aus den Dokumenten :
%Vor%Warum das so einfach ist: Funktionen, die ein Objekt in Cocoa an Ort und Stelle mutieren, geben normalerweise void zurück, so dass Sie sie leicht von Funktionen unterscheiden können, die ein anderes Objekt zurückgeben.
Außerdem gibt es keinen Grund für mutableCopy
das gpsAttributes
dictionary; Es wird nur als Argument für -[addEntriesFromDictionary:]
verwendet, das nicht änderbar sein muss.
Der richtige Weg ist also:
%Vor% Sie können dies in eine Funktion (oder eine Methode in einer Kategorie in NSDictionary
) einfügen, wenn Sie dies häufig tun:
In der Dokumentation sagt addEntriesFromDictionary Folgendes:
Wenn beide Wörterbücher den gleichen Schlüssel enthalten, wird dem vorherigen Wertobjekt des empfangenden Wörterbuchs für diesen Schlüssel eine Freigabemeldung gesendet, und das neue Wertobjekt wird an seine Stelle gesetzt. Sie müssen setObject verwenden, um jedes Objekt zum Dictionary hinzuzufügen. Sie müssen die Schlüssel eines Wörterbuchs durchlaufen und zum endgültigen Wörterbuch hinzufügen.
Sogar setObject sagt dasselbe:
Der Schlüssel für den Wert. Der Schlüssel wird kopiert (mit copyWithZone :; Schlüssel müssen dem NSCopying-Protokoll entsprechen). Wenn ein Schlüssel bereits im Wörterbuch vorhanden ist, nimmt ein Objekt seinen Platz ein. Sie können nicht zwei gleiche Schlüssel im Wörterbuch haben. Alle Schlüssel im Wörterbuch sind eindeutig.
Wenn Sie immer noch den gleichen Schlüsselwert im Wörterbuch haben möchten, müssen Sie einen anderen Schlüssel verwenden.
Sie haben beispielsweise zwei Wörterbücher mit folgenden Werten:
%Vor%und am Ende dieser Schleife haben Ihre neuen änderbaren Wörterbücher die folgenden Schlüsselwerte:
%Vor%Wie Sie sehen können, werden Hallo und Hallo2 Schlüssel umbenannt als Ext-Hallo1, Ext-Hallo2. formiere das dict1, und du hast immer noch alle dict2-Werte zu deinem veränderbaren Diktat hinzugefügt.
Wenn Sie keinen neuen Schlüssel hinzufügen möchten, können Sie die Werte zu einem arrya hinzufügen und das Array zum Wörterbuch hinzufügen. Sie können die for-Schleife ändern zu:
%Vor%Und jetzt werden Sie die Werte in ein Array zusammengeführt haben:
%Vor%Auf diese Weise ist die Anzahl der Schlüssel gleich und die Werte für denselben Schlüssel werden als Array hinzugefügt.
Tags und Links objective-c ios nsdictionary