Fügen Sie ein Objekt in NSMutableArray ein, das mit NSUserDefaults gespeichert wurde
Ich habe ein NSMutableArray gespeichert, die mit NSUserDefaults.
Dieses array ist mein "Lieblings" - Artikel, dass der Benutzer speichert, so dass, wenn möchte ich hinzufügen, dass eine Sache, die ich Lesen muss das array (von NSuserDefault) und speichern Sie in die erste freie position.
Ich bin mit dieser Methode fügen Sie einen Wert in das NSMutableArray
-(IBAction)save{
NSMutableArray *abc = [[NSUserDefaults standardUserDefaults] objectForKey:@"12345"];
int n = [abc count];
[abc insertObject:@"aaa" atIndex:n];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[[NSUserDefaults standardUserDefaults] setObject:abc forKey:@"12345"];
[defaults synchronize];
[abc release];
}
was ist der deal?
Wenn der Benutzer diese Methode aufrufen, zwei mal, beim zweiten mal stürzt die app mit diesem log:
* Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFArray insertObject:atIndex:]: verändernde Methode gesendet immutable-Objekt'
warum?
und warum gerade das zweite mal?
Das erste mal funktioniert!
InformationsquelleAutor der Frage JAA | 2011-03-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
NSUserDefaults
gibt immer unveränderliche Objekte, auch wenn das ursprüngliche Objekt verändert werden. Es ist in der Dokumentation fürobjectForKey
:Werden Sie brauchen, um eine Kopie des zurückgegebenen Objekts, bevor Sie es ändern, mit
[NSMutableArray arrayWithArray:]
Wohl auch am besten verwenden Sie die
arrayForKey
Methode derNSUserDefaults
wenn Sie das abrufen eines Arrays. Docs hier: https://developer.apple.com/documentation/foundation/userdefaultsInformationsquelleAutor der Antwort lxt
Hier ein komplettes Beispiel:
Ersten Lesen wir in den gespeicherten Daten in einem mutable-array -, update-array speichern Sie das neue array, und dann synchronisieren Sie die Benutzer-Standardeinstellungen, um dauerhaft die Eintragung der änderungen.
Hoffe, das hilft!
InformationsquelleAutor der Antwort Zorayr
Andere option ist:
InformationsquelleAutor der Antwort RileyE
Kopieren-Array aus einer
NSUserDefault
übrigens so aus :oder
InformationsquelleAutor der Antwort Amitabha
Ist es, weil Sie NSMutablepointer Punkte ein NSUserDefault-Objekt direkt. Sie sollten erste Kopie NSUserDefault Objekt zu einem array als Prozess.
InformationsquelleAutor der Antwort fsakar
Quick fix:
InformationsquelleAutor der Antwort Seb OH