2014-03-07 12 views
14

Ich habe eine Sandbox-App für OSX und ich habe einige Daten in NSUserDefaults gespeichert, alles war in Ordnung, bis ich die PLIST-Datei aus dem Verzeichnis ~ Library/Preferences/ gelöscht.OS X: NSUserDefaults nicht gespeichert

Ich dachte, die App sollte es neu erstellen, aber es tat es nicht. Wenn ich mich debuggen, dass

[[NSUserDefaults standardUserDefaults] synchronize] Methode liefert werden YES

und Daten in der Klasse gespeichert, aber wenn ich die app Benutzereinstellungen neu zu starten ist leer.

Auch wenn ich diese PLIST-Datei aus dem Backup in das Preferences-Verzeichnis kopiere, sieht die App es nicht.

Natürlich sollte die PLIST in der Container/myApp BundleID/Daten/Library/Preferences gespeichert werden und wenn ich die PLIST-Datei von der Sicherung in dieses Verzeichnis kopieren, kann die App es sehen, aber warum diese Datei nicht neu erstellt, als ich es gelöscht habe?

Weiß jemand, warum ist das?

+3

Ich verstehe nicht, die nach unten Stimmen. Perfekt legitime Frage. Ich habe auch Probleme mit NSUserDefaults nicht persistent. Ich möchte testen, ob meine App von einer leeren Seite gestartet wird. Also trash ich meinen Sandbox-Container, sobald ich das tue, bleiben NSUserDefaults nie bestehen, bis ich das OS neu starte. Das An- und Abmelden bewirkt nichts, nur der Neustart hilft. –

+1

Danke @Brad Goss. Ich hatte das gleiche Problem, nachdem ich meine Sandbox ausgeräumt hatte, stundenlang ausgetestet, obwohl ich verrückt wurde. Neustart OSX schien es gelöst zu haben. – staeryatz

Antwort

2

prüfen diese Frage - könnte Caching oder Prefs Lage in Beziehung gesetzt werden, wenn sie in der Sandbox ausgeführt wird:

Mac sandbox created but no NSUserDefaults plist

+0

Synchronize-Funktion sollte Cache mit der Datenbank auf der Festplatte synchronisieren, so denke ich, gibt es kein Problem mit dem Zwischenspeichern. Einstellungen sollten in den Containern/app/Data/Library/Preferences abgelegt werden, aber dieses Verzeichnis ist ebenfalls leer. –

+0

Das hat mich auch gebissen. Das Löschen des Containers (während der Entwicklung) verursachte alle Arten von Kummer. "defaults delete", etc. konnte nicht helfen, und 'synchronize' schrieb nichts. –

2

ich dieses Problem hatte, die manuell durch Löschen der Dateien verursacht wird. Sie können stattdessen den Terminalbefehl defaults verwenden. Auf diese Weise konnte ich die Standardeinstellungen zurücksetzen, ohne die Dinge zu ändern. Ersetzen Sie "bundle-identifier" durch Ihre Bundle-ID.

die aktuellen Werte an:

defaults read bundle-identifier 

gespeicherten Werte zu entfernen:

defaults delete bundle-identifier