Ich habe NSMutableArray
von NSMutableArrays
:
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
:
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.
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.
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: Ссылка
Tags und Links objective-c iphone ios xcode cocoa