2010-04-22 24 views
1

在我的应用程序我有一个NSTableView绑定到ArrayController(arrangeObjects)。我也有一个详细信息视图(只是一些文本框)绑定到相同的控制器(选择)。可可约束:手动提交更改?

现在每次编辑文本字段时,更改都会自动发送到ArrayController,并且表格也会更改。我怎样才能避免这种情况?我想要的是一个“提交按钮”。只有在按下按钮时才会将数据更改发送给控制器,而不是每次进行编辑时都自动发送。

回答

2

这个问题确实有两个答案。第一个更哲学:在大多数情况下,你希望模型的更新瞬间发生。大多数情况下,用户不需要为保存,提交等而改变制作方式。 Binding与NSUndoManager的无缝整合意味着用户所做的任何事情都可以撤销(或者应该是可撤销的)。所有用户操作都应该是“低风险”的,以便进行更改然后撤消不会对用户的数据或应用程序状态造成不必要的“伤害”。如果您在模型图层中使用Core Data,则可以始终使用NSManagedObjectContext的方法以编程方式回滚或保存一组更改。除非真有为什么用户需要一个“提交”按钮的好的理由,不要让其中一个。按照这一理念,Gmail的“撤消发送”功能。即使发送电子邮件也应该是可撤销的(在合理范围内)。

第二个答案更实用。当然,在某些情况下,您正在处理的后端系统并不像Cocoa那样宽恕undos。在这种情况下,最好的选择是创建一个临时模型对象,作为UI的模型(可以考虑模型 - 视图 - 视图 - 模型(MVVM)架构中的视图模型)。当用户提交更改时,可以将临时模型对象复制到持久模型中。在核心数据中,您可以使用支持单独管理对象上下文的内存中持久存储来存放这些临时实例,然后将此临时上下文中的更改合并到提交的主上下文中。

0

这可能是不够的:

  • 选择Interface Builder中的文本字段。
  • 切换到“检查器”面板的“文本字段属性”窗格(按Cmd-1)。
  • 将操作弹出框更改为“仅在输入时发送”。