如何在使用Cocoa绑定时取消保存首选项?

时间:2009-12-25 21:12:36

标签: cocoa macos cocoa-bindings

我刚刚开始搞乱绑定。我已经开始实现一个首选项对话框,将一些NSColorWell绑定到共享默认控制器。那是完美的。我的值被编码并正确保存。

但是,什么不起作用是取消对话框。如果我取消,则仍会保存这些值。

似乎我应该将取消按钮绑定到NSUserDefaultController的“revert”,但当然如果我这样做,我无法将它绑定到“performClose”(除非有办法将按钮绑定到多个我不知道的行动。)

我应该如何绑定取消按钮以恢复更改并关闭窗口。显然,我可以通过编写一个同时执行这两种操作的方法来实现,但似乎应该可以在IB中实现。

1 个答案:

答案 0 :(得分:7)

两件事:

首先,按照惯例,在进行更改时立即应用Mac OS X上的首选项。首选项更改没有“取消”或“应用”(如在Windows中)。有一个“默认值”按钮,它会重置首选项,但不会因为立即应用更改而取消,这并不罕见。让你的应用程序的首选项工作有点奇怪,因为它不遵循惯例。

其次,因为您通过绑定直接更改这些值(就像您使用目标/操作机制一样),您不会让自己有机会退出更改。这里最好的做法是创建一个字典控制器,其内容是应用程序首选项的副本。编辑将在该字典上进行。如果用户取消,您只需丢弃字典。如果用户接受更改,您将字典中的设置复制到实际的应用程序首选项,然后将其丢弃。如果你必须“缓冲”你的应用程序设置,这是一个很好的方法,同时仍然使用Bindings将UI连接到prefs,但你仍然负责在用户接受时应用更改。