Ich habe eine AppDelegate-Klasse mit +(void)initialize
Methode, die ich verwende, um einige Standardwerte zu registrieren. Hier ist der Code, den ich benutze:Wie Benutzerstandards mit NSUserDefaults registrieren, ohne bestehende Werte zu überschreiben?
+ (void)initialize {
NSDictionary *defaults = [NSDictionary dictionaryWithObjectsAndKeys:@"NO", @"fooKey", @"YES", @"barKey", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
}
ich auch Preferences.xib geschaffen, das Paar von Kontrollkästchen hält (NSButton
), dass der Anzeigestatus von Präferenzen. Sie sind an NSUserDefaultsController
mit denselben Schlüsseln gebunden (fooKey und barKey in diesem Fall). Jedes Mal, wenn ich eine App starte und die "Standardeinstellungen" ändere, werden sie beim nächsten Start der App wiederhergestellt.
Gibt es eine Möglichkeit, "Standardeinstellungen" zu registrieren, ohne bereits vorhandene Werte zu überschreiben? Vielleicht wird jedes Mal, wenn ich eine App erstelle und starte, die Voreinstellungsdatei neu erstellt? Vielleicht sollte ich Kontrollkästchen von NSUserDefaultsController
lösen und die Werte der Schlüssel selbst mit einigen benutzerdefinierten Code im Einstellungsfenster Controller beibehalten?
Ich würde gerne Ihre Implementierung der Wahl für die Benutzereinstellungen zu hören.
Ich verwende Mac OS X 10.6.2 und XCode 3.2.1
Stellen die Kontrollkästchen sicher sind verpflichtet, auf "Shared Benutzervorgaben Controller", Steuertaste "Werte", Modell Schlüsselpfade "fooKey"/"Barkey". Sonst sieht dein Code gut für mich aus. – Costique
'@" NO "' ist kein Boolesches Literal; Es ist ein String-Literal für das Wort "NEIN". Sie sollten '[NSNumber numberWithBool: NO]' verwenden; Andernfalls sind die Werte in den Benutzerstandardwerten nicht Boolesch. –
Nein, werden sie nicht sein, aber wenn ich sie als BOOLs lese - werden sie. Auszug aus Daniel H. Steinbergs Buch "Cocoa Programming" (pragprog.com): Eigentlich müssen Sie nicht so explizit sein, wenn Sie das BOOL in das Wörterbuch stellen. Sie könnten den Wert YES oder NO als String übergeben und trotzdem einen BOOL von diesem Wert erstellen, wenn Sie von den Einstellungen lesen. – Eimantas