Wie schreibt man sich mit NSUserDefaults ohne Überschreiben der vorhandenen Werte Benutzereinstellungen?

StackOverflow https://stackoverflow.com/questions/2076816

Frage

Ich habe eine AppDelegate Klasse mit +(void)initialize Methode, dass ich einige Ausfälle registrieren verwenden. Hier ist der Code, dass ich benutze:

+ (void)initialize {
  NSDictionary *defaults = [NSDictionary dictionaryWithObjectsAndKeys:@"NO", @"fooKey", @"YES", @"barKey", nil];

  [[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
}

Ich habe Preferences.xib auch die paar Kontrollkästchen hält (NSButton) dieser Anzeigestatus von Präferenzen. Sie sind mit dem gleichen Schlüssel zu NSUserDefaultsController gebunden (fooKey und Barkey in diesem Fall). Jedes Mal, wenn ich eine App starten und ändern Sie die „Defaults“ sie auf dem nächsten App-Start gestellt werden.

Gibt es eine Möglichkeit „Standardvorgaben“ zu registrieren, ohne vorhandene Werte überschrieben bereits? Vielleicht bauen jedes Mal, wenn ich und starten Sie eine App seine Voreinstellungsdatei neu erstellt wird? Ich soll unbind Kontrollkästchen aus NSUserDefaultsController Vielleicht und halten die Werte des Schlüssels selbst mit einigen benutzerdefinierten Code in Einstellungen-Fenster-Controller?

Ich möchte Ihre Durchführung der Wahl hören, für die Ausfälle Benutzer beibehalten wird.

Ich verwende Mac OS X 10.6.2 und XCode 3.2.1

War es hilfreich?

Lösung

Aus der Dokumentation für -registerDefaults: (Hervorhebung hinzugefügt):

  

Der Inhalt der Registrierungsdomäne sind nicht auf die Platte geschrieben; müssen Sie diese Methode aufrufen, jedes Mal Ihre Anwendung startet . Sie können in der Ressourcen-Verzeichnis und Anruf registerDefaults Anwendung eine plist-Datei platzieren. Mit dem Inhalt, dass Sie in aus dieser Datei lesen

So Ihr Code auf dem richtigen Weg war. Dies ist, wie Sie die Standardvorgaben registrieren.

ich dies in der Regel in -applicationDidFinishLaunching: verwenden:

// Load default defaults
[[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Defaults" ofType:@"plist"]]];

ein plist macht es einfach hinzufügen und ändern Standardeinstellungen in Ihrer Anwendung, und es verhindert, dass Sie machen den Fehler, zu @"NO" als Wert verwendet wird.

Edit: Swift 3 Variante:

 UserDefaults.standard.register(defaults: NSDictionary(contentsOf: Bundle.main.url(forResource: "Defaults", withExtension: "plist")!)! as! [String : Any])
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top