cocoa 结合 : Submit changes manually?

标签 cocoa cocoa-bindings

在我的应用程序中,我有一个绑定(bind)到 ArrayController (arrangedObjects) 的 NSTableView。我还有一个绑定(bind)到同一个 Controller (选择)的详细信息 View (只是一些文本字段)。

现在,每次我编辑文本字段时,更改都会自动发送到 ArrayController,表也会更改。我怎样才能避免这种情况?我想要的是一个“提交按钮”。数据更改应该仅在我按下按钮时发送到 Controller ,而不是每次编辑时自动发送到 Controller 。

最佳答案

这个问题实际上有两个答案。第一个更哲学:在大多数情况下,您希望模型的更新立即发生。大多数情况下,用户不必为保存、提交等更改而烦恼。 Binding 与 NSUndoManager 的广泛集成意味着用户所做的任何事情都可以撤消(或者应该是不可撤消的)。所有用户操作都应该是“低风险”的,以便进行更改然后撤消不会对用户数据或应用程序状态造成不必要的“损害”。如果您将 Core Data 用于模型层,则始终可以使用 NSManagedObjectContext 的方法以编程方式回滚或保存一组更改。除非用户有确实充分的理由需要“提交”按钮,否则不要添加按钮。Gmail 的“撤消发送”功能就符合这一理念。即使发送电子邮件也应该是不可撤销的(在合理范围内)。

第二个答案更实用。当然,在某些情况下,您所处理的后端系统不像 Cocoa 那样宽容地进行撤消。在这种情况下,最好的选择是创建一个临时模型对象作为 UI 的模型(想想模型- View - View -模型 (MVVM) 架构中的 View -模型)。当用户提交更改时,您可以将临时模型对象复制到持久模型中。在 Core Data 中,您可以使用内存中的持久存储来支持单独的托管对象上下文来保存这些临时实例,然后在提交时将此临时上下文中的更改合并到您的主上下文中。

关于 cocoa 结合 : Submit changes manually?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2688487/

相关文章:

ios - 具有本地化字符串的核心数据排序描述符

cocoa - 为gdb创建NSTask

cocoa - 绑定(bind)到 NSViewController 的representedObject

objective-c - 在 Objective-C 中连接委托(delegate)类

cocoa - 使用 NSWindowController 加载 NIB 文件不会设置窗口或顶级对象

nstableview - 绑定(bind)空占位符未在基于 View 的 NSTableView 中翻译

objective-c - 是否可以在 Cocoa 中绑定(bind)空占位符?

objective-c - 通过单击 NSCollectionVIew 项获取模型

objective-c - NSOutlineView 和 NSTreeController 示例

iphone - 获取 nsstring 的实例 ID