可可 - NSUserDefaults的上值变更通知?(Cocoa - Notification

2019-06-14 18:55发布

比方说,我有钥匙@“为MyPreference”,通过存储NSUserDefaults的对应值。

是否有当值被修改时得到通知的方式?

或可能是通过绑定来实现? (但是,这种情况下,替代值绑定到UI元素,我希望我的对象被更改的通知,让我可以执行其他任务。)

据我所知,NSUserDefaultsDidChangeNotification可以观察到,但是这似乎是一个全有或全无的方法,并且似乎没有成为一个机制那里得到的特定键 - 值对被修改。 (随时纠正。)

Answer 1:

花了一整天寻找答案,才发现它提出的问题后10分钟...

遇到通过键 - 值观测的解决方案:

[[NSUserDefaultsController sharedUserDefaultsController] addObserver:self
    forKeyPath:@"values.MyPreference"
    options:NSKeyValueObservingOptionNew
    context:NULL];

或者更简单(每下面的评论):

[[NSUserDefaults standardUserDefaults] addObserver:self
                                        forKeyPath:@"MyPreference"
                                           options:NSKeyValueObservingOptionNew
                                           context:NULL];


Answer 2:

迅速:

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")
}


Answer 3:

而苹果公司的员工建议在这里使用NSUserDefaultsDidChangeNotification通知: https://devforums.apple.com/message/237718#237718



Answer 4:

我同意@DenNukem。 我用的是NSKeyValueObservingOptionNew。 但此功能并开始给我BADACCESS代码= 1级的错误,无论我用NSUserdefault为了节省其他对象。 如果您使用的核心价值观察员,只是知道NSUserDefaults的上僵尸的问题。

这里是链接到解决方案: NSUserDefaults的和志愿的问题



文章来源: Cocoa - Notification on NSUserDefaults value change?