Call function when if value in NSUserDefaults.standardUserDefaults() changes

不羁的心 提交于 2019-12-22 10:03:29

问题


I have a variable that become value from NSUserDefaults.standardUserDefaults()

var GiftCount = NSUserDefaults.standardUserDefaults().valueForKey("Gift") as! Int

And i have a function named setGiftCount()...

I need call this function when variable GiftCount has changed... How to do it?


回答1:


First

NSUserDefaults.standardUserDefaults().addObserver(self, forKeyPath: "Gift", options: NSKeyValueObservingOptions.New, context: nil)

Second

deinit {
    NSUserDefaults.standardUserDefaults().removeObserver(self, forKeyPath: "Gift")
}

Third

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



回答2:


You can add an observer for NSUserDefaultsDidChangeNotification to your view controller:

adding:

NotificationCenter.default.addObserver(self, selector: #selector(userDefaultsDidChange), name: UserDefaults.didChangeNotification, object: nil)

removing it:

NotificationCenter.default.removeObserver(self, name: UserDefaults.didChangeNotification, object: nil)

and add the selector method:

func userDefaultsDidChange(_ notification: Notification) {
    // your code...   setGiftCount()
}


来源:https://stackoverflow.com/questions/36608645/call-function-when-if-value-in-nsuserdefaults-standarduserdefaults-changes

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!