NSMutableArray von NSMutableArrays. Mutationsmethode an unveränderliches Objekt gesendet

7

Ich habe NSMutableArray von NSMutableArrays :

%Vor%

Dann, wenn ich das versuche:

%Vor%

es stürzt ab mit: [__NSCFArray replaceObjectAtIndex:withObject:]: mutating method sent to immutable object'

Warum? Wie repariert man ? Danke!

UPD : Ich speichere dieses Array in NSUserDefaults :

%Vor%

Dann lese ich es in der anderen Klasse:

%Vor%

Auch muss ich erwähnen, dass der Code manchmal gut läuft und sich von "0" zu "1" ändert. Aber es stürzt manchmal auch ab. Also kann ich die Logik nicht sehen, warum es gut funktioniert oder warum es manchmal abstürzt.

    
SmartTree 12.02.2013, 19:40
quelle

3 Antworten

25

Das Problem ist, dass wenn Sie das Array aus NSUserDefaults lesen, die Mini-Arrays nicht automatisch NSMutableArrays sind.

Versuchen Sie Folgendes:

%Vor%

Bearbeiten: Die beste Coder-Antwort erklärt, warum das so ist. Objekte, die in NSUserDefaults gespeichert sind, werden als unveränderbare Versionen gespeichert. Grundsätzlich ist NSUserDefaults ein Plist und es gibt kein Flag, das ein Array als veränderlich / unveränderlich markiert. Wenn Sie es also wieder auslesen, wird angenommen, dass es unveränderlich ist.

    
Lance 12.02.2013, 20:09
quelle
6
  

Von NSUserDefaults zurückgegebene Werte sind unveränderlich, selbst wenn Sie a einstellen   veränderbares Objekt als Wert. Zum Beispiel, wenn Sie eine veränderbare Zeichenfolge festlegen   als Wert für "MyStringDefault", die Zeichenfolge, die Sie später abrufen   Mit stringForKey: wird unveränderlich.

Erstellen Sie stattdessen eine mutableCopy des Arrays, das Sie von NSUserDefaults abrufen, fügen Sie Ihr Objekt hinzu, und setzen Sie dann Ihr neues Array zurück.

siehe diesen Link: Ссылка

    
Best Coder 12.02.2013 20:11
quelle
-5

Verwenden Sie mehr ausführlichen Code:

%Vor%     
Chris C 12.02.2013 19:57
quelle

Tags und Links