如何判断NSUserDefaultsController sharedUserDefaultsController的值是否已更改

时间:2014-10-13 01:49:40

标签: objective-c xcode macos cocoa cocoa-bindings

我有一个为我的应用程序实现首选项面板的典型案例,但我遇到了检测任何首选项值更改的问题。在我的情况下,我不想自动应用更改,因此我已设置

[[NSUserDefaultsController sharedUserDefaultsController] setAppliesImmediately:NO];

我还将我的偏好设置面板中的所有控件绑定到 sharedUserDefaultsController

然后我在偏好设置面板中有一个取消和一个应用按钮,如果对 sharedUserDefaultsController 值进行了任何更改,我只想启用“应用”按钮。

所以我想我可以将 sharedUserDefaultsController hasUnappliedChanges 绑定到我的Apply按钮启用属性。但 hasUnappliedChanges 仅返回 true ,即使未进行任何更改也是如此。或者实际上,只要我不加载我的首选项面板窗口,它就会返回 false 。但只要窗口加载并且达到 awakeFromNib hasUnappliedChanges 就会返回 true 。从那以后,我无法将其重置为 false 。如果我保存 sharedUserDefaultsController 并不重要。

所以我的问题是:

  • 如何正确检测 sharedUserDefaultsController 的任何值是否已更改?

  • 将控件绑定到 sharedUserDefaultsController hasUnappliedChanges 是否有效?

感谢我能得到的任何帮助。


修改

我尝试观察 NSUserDefaultsDidChangeNotification ,但只在将值保存到用户默认值后才发布更新。换句话说,在我打电话之后

[(NSUserDefaultsController*)[NSUserDefaultsController sharedUserDefaultsController] save:sender];

所以,除非我使用这种错误的方式,否则我无法说清楚。

0 个答案:

没有答案