App stürzt ab beim speichern von NSArray in NSUserDefaults
Konnte ich nicht speichern, ein NSArray in NsUserDefaults
. Die app bekommt abgestürzt
in dieser Zeile
[savedData setObject:jsonValue forKey:@"JSONDATA"];
Unten ist mein code. und ich habe vergessen meine log folgenden Fehler
NSArray *jsonValue =[NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSUserDefaults *savedData = [NSUserDefaults standardUserDefaults];
[savedData setObject:jsonValue forKey:@"JSONDATA"];
[savedData synchronize];
Fehler melden:
*** Terminating app due to uncaught exception '`NSInvalidArgumentException`', reason: '*** -
[NSUserDefaults setObject:forKey:]: attempt to insert non-property list object <CFBasicHash 0x8c62b10 [0x1d2aec8]>{type = immutable dict, count = 3,
entries =>
InformationsquelleAutor der Frage iworld | 2014-09-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, Sie können nicht gespeichert werden, wie dies in NSUserDefaults.
Schreibe ich eine code unten bitte haben Sie einen Blick und für mehr studieren gehen, sehen apple-docs okay.
Code ist hier:
//Zum Speichern
//Zum abrufen
InformationsquelleAutor der Antwort kshitij godara
Während kshitij s Antwort ist richtig, leider, es nicht zu Ende. Wenn Sie möchten, speichern Sie benutzerdefinierte Objekte, die sich innerhalb Ihrer
NSUserDefaults
das benutzerdefinierte Objekt zu implementieren hat dieNSCoding
Protokoll und überschreiben Sie dieinitWithCoder
undencodeWithCoder
Methoden. Ein Beispiel für eine solche sein kann, wie:InformationsquelleAutor der Antwort avismara
versuchen, wie diese
InformationsquelleAutor der Antwort Sport
Ich denke jsonValue ist NSDictionary nicht NSArray..
//(ODER)
Auch ich denke, man kann nicht speichern Sie die NSDictionary direkt in NSUserDefaults..Gehen durch @kshitij godara, um es fertig/speichern..
Können Sie NSKeyedArchiver zu schreiben, aus Ihrem Wörterbuch zu einem NSData.
Zum abrufen von Daten:
Hoffe das hilft dir..!
InformationsquelleAutor der Antwort Vidhyanand
NSUserDefaults akzeptiert Eigenschaftsliste Objekte - NSDictionary, NSArray, NSString, NSNumber, NSDate und NSData. JSON-Dokumente enthalten NSDictionary, NSArray, NSString, NSNumber und NSNull. Sehen Sie den Unterschied - Eigenschaft list-Objekte enthalten, nicht NSNull Werte.
Wenn Ihr JSON-Objekt enthält eine NSNull-Objekt (JSON-Dokument, das Sie analysiert, enthielt einen "null" Wert), dann kann man nicht speichern Sie es in NSUserDefaults. Abgesehen davon, dass all die Kommentare, die sagen, dass Sie können nicht speichern von JSON-Daten in NSUserDefaults sind Unsinn. Es ist nur NSNull Objekte, die ein problem verursachen.
Es ist eine sehr, sehr einfache Lösung für Ihr problem. Nur speichern die original json-Daten als NSData-Objekt in NSUserDefaults. Dann wenn Sie Lesen Sie die NSUserDefaults, erhalten Sie die NSData und analysieren Sie. Statt
du noch kurz schreiben,
InformationsquelleAutor der Antwort gnasher729
Müssen Sie zuerst NSArray zuweisen, dann können Sie übergeben Sie die Werte in array. Sie können nicht direkt übergeben Wert.
NSArray *a = [[NSArray alloc]initWithObjects:[NSJSONSerialization JSONObjectWithData:Daten Optionen:0 error:nil], nil];
InformationsquelleAutor der Antwort Arjun Gupta
NSUserDefaults sollte nur verwendet werden, für bis zu 500k von Daten (https://forums.developer.apple.com/message/50696#50696)
Wenn die Lagerung von größeren Mengen apps, die Abstürzen, aus persönlichen Erfahrung, die ich gesehen habe apps speichern von 1 MB Daten, die Absturz beim/kurz nach [NSUserDefaults setObject:] und [NSUserDefaults synchronisieren];
Um zu überprüfen, wie viel Daten eine live-Anwendung öffnen Sie Xcode -> Fenster -> Geräte, wählen Sie Ihr Gerät, wählen Sie Ihre app in den Installierten Apps und die App-Container. Standardwerte werden gespeichert im AppData->Einstellungen->Ihr.app.plist
Alternative zum speichern von Daten in den user defaults um eine Datei zu schreiben:
InformationsquelleAutor der Antwort A.Badger