假设我有一个密钥@"MyPreference"
,并通过NSUserDefaults
存储了相应的值。
有没有办法在修改值时得到通知?
或者可以通过绑定来实现?(但在这种情况下,我不是将值绑定到UI元素,而是希望将更改通知给我的对象,以便我可以执行其他任务。)
我知道可以观察到NSUserDefaultsDidChangeNotification
,但这似乎是一种要么全有要么全无的方法,并且似乎没有一种机制来获取修改后的特定键值对。(请随时更正。)
发布于 2009-07-17 04:11:13
花了一整天的时间寻找答案,10分钟后才找到答案……
通过键值观察找到了一个解决方案:
[[NSUserDefaultsController sharedUserDefaultsController] addObserver:self
forKeyPath:@"values.MyPreference"
options:NSKeyValueObservingOptionNew
context:NULL];
或者,更简单地(根据下面的评论):
[[NSUserDefaults standardUserDefaults] addObserver:self
forKeyPath:@"MyPreference"
options:NSKeyValueObservingOptionNew
context:NULL];
发布于 2015-06-28 18:11:46
Swift:
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")
}
发布于 2010-08-24 00:53:52
建议苹果员工在这里使用NSUserDefaultsDidChangeNotification通知:https://devforums.apple.com/message/237718#237718
https://stackoverflow.com/questions/1141388
复制相似问题