"Mutierende Methode wird an unveränderliches Objekt gesendet", obwohl das Objekt NSMutableDictionary ist

7

Ich verwende NSMutableDictionary und drücke diesen Fehler:

%Vor%

Hier ist der Code:

%Vor%

Alle Konsolenprotokolle zeigen an, dass die Daten in Ordnung sind. Hier beginnen die Dinge zu brechen. Ich übergebe die Eigenschaft invoiceDict an den nächsten View-Controller:

%Vor%

In CheckoutViewController.m:

%Vor%

Der Fehler liegt bei [self.invoiceDict setObject...] . Ich habe sichergestellt, dass alle Wörterbücher, die ich verwende, NSMutableDictionary sind. Ich ließ einige der auskommentierten Zeilen im Code, um die Dinge zu zeigen, die ich ausprobiert habe, und ich traf eine Mauer. Ich denke, ich kann immer ein neues Wörterbuch erstellen. Ist das der bevorzugte Weg, es zu tun?

    
okysabeni 28.11.2011, 16:32
quelle

2 Antworten

9

Sie ordnen ein Wörterbuch in invoiceDictFromReq zu, und als nächstes erstellen Sie ein anderes Wörterbuch. Sie erstellen dort ein Speicherleck. Löschen Sie die Zeile

%Vor%

Aber Ihr Problem ist, dass Sie ein NSMutableDictionary erstellen, aber Sie setzen auf self.invoiceDiskutieren Sie ein Dictionary in Ihrem mutableDictionary, das nicht notwendigerweise auch ein mutableDictionary ist. Ändern Sie die Zeile

%Vor%

für

%Vor%     
Bruno Domingues 28.11.2011, 16:41
quelle
15

NSJSONSerialization gibt standardmäßig unveränderbare Objekte zurück. So erhalten Sie ein veränderbares Wörterbuch aus dem Parser:

  • Verwenden Sie die Option NSJSONReadingMutableContainers

oder

  • Verwenden Sie mutableCopy für das Ergebnis
Tricertops 11.03.2013 09:57
quelle