在我的应用程序中,我有一个绑定到ArrayController(arrangeObjects)的NSTableView。我还有一个绑定到同一个Controller(选择)的详细信息视图(只是一些文本字段)。
现在每次编辑文本字段时,更改都会自动发送到ArrayController,并且表也会更改。我怎么能避免这个?我想要的是一个“提交按钮”。数据更改只应在按下按钮时发送到控制器,而不是每次进行编辑时都自动发送。
答案 0 :(得分:2)
这个问题确实有两个答案。第一种是更具哲学性:在大多数情况下,您希望模型的更新能够即时发生。在大多数情况下,用户不必担心保存,提交等等。绑定与NSUndoManager
的普遍集成意味着用户所做的任何事情都可以撤消(或者应该是可撤消的)。所有用户操作都应该是“低风险”,这样进行更改然后撤消不会对用户的数据或应用程序状态造成不必要的“伤害”。如果您正在为模型层使用Core Data,则始终可以使用NSManagedObjectContext
的方法以编程方式回滚或保存一组更改。除非确实有充分理由说明用户需要“提交”按钮,否则请不要放入。按照这种理念,Gmail的“撤消发送”功能。即使发送电子邮件也应该是可以撤销的(在合理范围内)。
第二个答案更实用。当然,在某些情况下,您正在处理的后端系统不像Cocoa那样宽恕。在这种情况下,最好的选择是创建一个临时模型对象,作为UI的模型(想想模型 - 视图 - 视图 - 模型(MVVM)架构中的视图模型)。当用户提交更改时,您可以将临时模型对象复制到持久模型中。在Core Data中,您可以使用支持单独托管对象上下文的内存中持久性存储来保存这些临时实例,然后在提交时将此临时上下文中的更改合并到主上下文中。
答案 1 :(得分:0)
这可能就足够了: