Cocoa - Benachrichtigung bei NSUserDefaults Wertänderung?



Answers

Schnell:

override func viewDidLoad() {
  super.viewDidLoad()
  NSUserDefaults.standardUserDefaults().addObserver(self, forKeyPath: "THE KEY", options: NSKeyValueObservingOptions.New, context: nil)
}

override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>) {
  // your logic
}

deinit {
  NSUserDefaults.standardUserDefaults().removeObserver(self, forKeyPath: "THE KEY")
}
Question

Nehmen wir an, ich habe einen Schlüssel @ "MyPreference" mit einem entsprechenden Wert, der über NSUserDefaults gespeichert wird.

Gibt es eine Möglichkeit, benachrichtigt zu werden, wenn der Wert geändert wird?

Oder könnte es durch Bindungen gemacht werden? (Anstatt jedoch den Wert an ein UI-Element zu binden, möchte ich, dass mein Objekt über die Änderung informiert wird, damit ich andere Aufgaben ausführen kann.)

Ich bin mir bewusst, dass NSUserDefaultsDidChangeNotification beobachtet werden kann, aber dies scheint ein Alles-oder-Nichts-Ansatz zu sein, und es scheint dort kein Mechanismus zu sein, um das spezifische Schlüssel-Wert-Paar zu erhalten, das modifiziert wurde. (Fühlen Sie sich frei zu korrigieren.)




Ich stimme @DenNukem zu. Ich habe NSKeyValueObservingOptionNew verwendet. Aber diese Funktion hat mir den Fehler BADACCESS Code = 1 gegeben, wo immer ich NSUserdefault benutzt habe, um andere Objekte zu speichern. Falls Sie Key Value Observer verwenden, beachten Sie das Zombie-Problem auf NSUserDefaults.

Hier ist der Link zur Lösung: NSUserDefaults und KVO-Probleme




Related