如果NSUserDefaults.standardUserDefaults()中的值发生更改,则调用函数

Dmi*_*try 3 variables nsuserdefaults swift swift2

我有一个变量从NSUserDefaults.standardUserDefaults()变成值

var GiftCount = NSUserDefaults.standardUserDefaults().valueForKey("Gift") as! Int
Run Code Online (Sandbox Code Playgroud)

我有一个名为setGiftCount()的函数...

当变量GiftCount发生变化时,我需要调用此函数...怎么做?

Dmi*_*try 21

第一

NSUserDefaults.standardUserDefaults().addObserver(self, forKeyPath: "Gift", options: NSKeyValueObservingOptions.New, context: nil)
Run Code Online (Sandbox Code Playgroud)

第二

deinit {
    NSUserDefaults.standardUserDefaults().removeObserver(self, forKeyPath: "Gift")
}
Run Code Online (Sandbox Code Playgroud)

第三

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
    setGiftCount()
}
Run Code Online (Sandbox Code Playgroud)

PS谢谢你的选票!


Leo*_*bus 8

您可以将NSUserDefaultsDidChangeNotification的观察者添加到视图控制器:

添加:

NotificationCenter.default.addObserver(self, selector: #selector(userDefaultsDidChange), name: UserDefaults.didChangeNotification, object: nil)
Run Code Online (Sandbox Code Playgroud)

删除它:

NotificationCenter.default.removeObserver(self, name: UserDefaults.didChangeNotification, object: nil)
Run Code Online (Sandbox Code Playgroud)

并添加选择器方法:

func userDefaultsDidChange(_ notification: Notification) {
    // your code...   setGiftCount()
}
Run Code Online (Sandbox Code Playgroud)

  • 这里的困难在于你不知道哪个值发生了变化,只知道其中一个值发生了变化。通知中也没有传递“userInfo”。 (2认同)