3

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

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

似乎我应该将取消按钮绑定到 NSUserDefaultController 的“revert”,但当然如果我这样做,我不能将它绑定到“performClose”(除非有一种方法可以将按钮绑定到我的多个操作'不知道)。

我应该绑定取消按钮以恢复更改并关闭窗口。显然我可以通过编写一个两者都做的动作方法来做到这一点,但似乎只在 IB 中应该是可能的。

4

1 回答 1

7

两件事情:

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

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

于 2009-12-25T21:17:34.823 回答