Ich suche nach einer schnelleren Möglichkeit, Benutzereinstellungen zu speichern als NSUserDefaults. Ich habe festgestellt, dass wenn die App innerhalb von 10 Sekunden nach dem Schreiben auf NSUserDefaults beendet wird, sie nicht dauerhaft gespeichert wird. Ich verwende die Standardeinstellungen, um Pfade zu benutzerdefinierten Klingeltönen, Pfade zu benutzerdefinierten Bildern, Kartenkoordinaten und im Grunde nur benutzerdefinierten Voreinstellungen zu speichern. Ist die Verwendung von Kerndaten die bessere Option? SQLite? Was wird als das schnellste und leichteste akzeptiert?NSUserDefaults Verliere neu gespeicherte Daten, wenn App innerhalb von 10 Sekunden beendet wurde
Antwort
Sie müssen sicherstellen, dass die Synchronisierung aufgerufen wird, um die Daten sofort zu speichern.
[[NSUserDefaults standardUserDefaults] synchronize];
Von Apple class reference:
Da diese Methode automatisch in regelmäßigen Abständen aufgerufen wird, verwenden diese Methode nur, wenn Sie nicht für die automatische Synchronisation (zB warten kann, ist, wenn Ihre Anwendung über um zu beenden) oder , wenn Sie die Benutzerstandardeinstellungen auf dem Datenträger aktualisieren möchten, obwohl Sie keine Änderungen vorgenommen haben.
Und um Ihre zweite Frage zu beantworten, hängt es wirklich davon ab, wie viele Daten Sie speichern möchten. NSUserDefaults wurde entwickelt, um sehr kleine Datenmengen (für Präferenzen) wie den Zustand eines Kippschalters usw. zu speichern. Sie können die Pfade zu Bildern und Klingeltönen hier speichern, aber es ist nicht genau ratsam. Damit meine ich, du kannst, aber wahrscheinlich nicht.
Core Data ist ein viel besserer Ansatz, wenn Sie viele dieser Pfade speichern möchten, da er sehr skalierbar ist und sehr gute Ergebnisse liefert. Wenn Sie also eine große Menge an Daten speichern müssen, können Sie die Core-Daten des Benutzers oder als weitere Alternative die Pfade in einem Verzeichnis im Dokumentenverzeichnis speichern.
Ja. +1 für dich, ich auch, ich habe meine cca 50 Wiederholungen zu dieser Zeit für die gleiche Antwort. Zu faul, um nach dem Betrogenen zu suchen. –
@ 0x7fffffff um (ca.) 50 –
@ 0x7fffffff (so viel Möchtegern-Programmierer und so wenig Aufwand ... :() –