2009-05-22 15 views
2

Ich möchte der Benutzer in der Lage sein, einige Vorlieben wie Farben, bevorzugte Bilder, etc. zu machen. Wenn ich NSUserDefaults für diese verwenden, wird beim ersten Start der App keine Präferenzen, nicht wahr? Also, jedes Mal, wenn ich eine Präferenz wieNSUserDefaults: Für was ist die Methode + resetStandardUserDefaults gut? Wie kann ich "Systemeinstellungen" angeben?

bekommen möchte

NSInteger avatarID = (NSInteger) [[NSUserDefaults standardUserDefaults] objectForKey: @ "avatar"];

Ich muss überprüfen, ob es null ist, und dann meine Systempräferenz verwenden. Aber dann habe ich das in der Dokumentation gesehen: + resetStandardUserDefaults

Gibt es zwei Zweige der Standardwerte irgendwo gespeichert? Die vom Benutzer und die vom Entwickler?

Antwort

6

Ja, aber es ist ein bisschen anders als das, was Sie tun. NSUserDefaults verfügt über die registerDefaults-Methode, mit der Sie die "leeren" Standardwerte aus einem NSDictionary mit den von Ihnen angegebenen Werten auffüllen können. Setzen Sie dies in Ihrem App-Controller in die + initialize-Methode und Sie werden wissen, dass die Standardwerte sinnvoll sind. Wenn das Standardobjekt des Benutzers einen "echten" Wert für einen Schlüssel findet, den Sie entweder beim Starten der aktuellen Anwendung festgelegt oder von der Festplatte geladen haben, hat dies immer Vorrang vor dem, was Sie in registerDefaults angegeben haben. resetStandardUserDefaults entfernt das freigegebene Benutzerstandardobjekt aus dem Speicher und macht alle Anpassungen rückgängig, die Sie daran vorgenommen haben. Sie müssen keine Standardwerte angeben.

Denken Sie auch daran, dass Sie nicht einfach ein Objekt an einen primitiven NSInteger-Wert übergeben können. Sie erhalten am Ende eine Zahl, die den Speicherort des Objektzeigers darstellt. Verwenden Sie NSUserDefaults integerForKey:, um ein Primitiv direkt zu erhalten, oder verwenden Sie objectForKey:, um eine NSNumber zu erhalten, und verwenden Sie integerValue, um den primitiven Wert zu erhalten.

+0

Kühl. In diesem NSDictionary würde ich also alle meine Systemstandards einstellen. Wenn der Benutzer sie ändern möchte und ich das standardUserDefaults-Objekt erhalte, würde ein Aufruf von objectForKey: ... die Standardwerte des Benutzers zurückgeben, und falls es für diesen Schlüssel keine gibt, nimmt er sie aus diesem Wörterbuch? Oder ist es andersrum? – Thanks

+1

Im Wesentlichen ja. NSUserDefaults durchsucht tatsächlich mehrere Suchdomänen, einschließlich globaler Systemeinstellungen, Startargumente und benutzerdefinierter Domänen, die Sie speziell hinzufügen. Aber in den meisten Fällen können Sie genau darüber nachdenken, es wird nach den Benutzereinstellungen suchen und den Wert aus dem Standardwörterbuch zurückgeben, wenn sie nicht existieren. –

+0

Sie meinen die Initialisierungsmethode des App-Delegaten? Wäre das der richtige Ort? Oder könnte es auch in -applicationDidFinishLaunching sein? – Thanks