假设我有一个密钥@"MyPreference",并通过NSUserDefaults存储了相应的值。

修改值后,有没有办法通知您?

还是可以通过绑定(bind)来完成? (但是在这种情况下,我希望将更改通知我的对象,而不是将值绑定(bind)到UI元素,以便我可以执行其他任务。)

我知道可以观察到NSUserDefaultsDidChangeNotification,但这似乎是一种全有或全无的方法,而且似乎没有一种机制可以获取修改过的特定键值对。 (随时进行更正。)

最佳答案

整天都在寻找答案,只在问了问题10分钟后才找到答案...

通过键值观察提出了一个解决方案:

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

或者,更简单地(按下面的评论):
[[NSUserDefaults standardUserDefaults] addObserver:self
                                        forKeyPath:@"MyPreference"
                                           options:NSKeyValueObservingOptionNew
                                           context:NULL];

07-24 14:59