比方说,我有钥匙@“为MyPreference”,通过存储NSUserDefaults的对应值。
是否有当值被修改时得到通知的方式?
或可能是通过绑定来实现? (但是,这种情况下,替代值绑定到UI元素,我希望我的对象被更改的通知,让我可以执行其他任务。)
据我所知,NSUserDefaultsDidChangeNotification可以观察到,但是这似乎是一个全有或全无的方法,并且似乎没有成为一个机制那里得到的特定键 - 值对被修改。 (随时纠正。)
比方说,我有钥匙@“为MyPreference”,通过存储NSUserDefaults的对应值。
是否有当值被修改时得到通知的方式?
或可能是通过绑定来实现? (但是,这种情况下,替代值绑定到UI元素,我希望我的对象被更改的通知,让我可以执行其他任务。)
据我所知,NSUserDefaultsDidChangeNotification可以观察到,但是这似乎是一个全有或全无的方法,并且似乎没有成为一个机制那里得到的特定键 - 值对被修改。 (随时纠正。)
花了一整天寻找答案,才发现它提出的问题后10分钟...
遇到通过键 - 值观测的解决方案:
[[NSUserDefaultsController sharedUserDefaultsController] addObserver:self
forKeyPath:@"values.MyPreference"
options:NSKeyValueObservingOptionNew
context:NULL];
或者更简单(每下面的评论):
[[NSUserDefaults standardUserDefaults] addObserver:self
forKeyPath:@"MyPreference"
options:NSKeyValueObservingOptionNew
context:NULL];
迅速:
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")
}
而苹果公司的员工建议在这里使用NSUserDefaultsDidChangeNotification通知: https://devforums.apple.com/message/237718#237718
我同意@DenNukem。 我用的是NSKeyValueObservingOptionNew。 但此功能并开始给我BADACCESS代码= 1级的错误,无论我用NSUserdefault为了节省其他对象。 如果您使用的核心价值观察员,只是知道NSUserDefaults的上僵尸的问题。
这里是链接到解决方案: NSUserDefaults的和志愿的问题