【问题标题】:Cocoa Binding only for retrievalCocoa Binding 仅用于检索
【发布时间】:2014-08-14 15:58:44
【问题描述】:

我有一个NSTableView,几乎没有控件。所有都绑定到数组控制器,其实体是NSManagedObject 的子类(或者简单地说是核心数据的实体)。

有一个复选框,它从实体中获取其值。

现在的问题是我不希望复选框值直接更新为 coredata。保存应该只发生在“保存”按钮操作上。

对于如何进行此操作的任何帮助将不胜感激。

【问题讨论】:

  • 您可以分离上下文,绑定到 A 让 B 观察 A,然后当您保存 A 时,您会收到包含 B 更改的通知,然后合并它。我可以提供代码...当然,在您保存上下文之前不会发生磁盘更改...

标签: objective-c cocoa core-data cocoa-bindings


【解决方案1】:

按下保存按钮时使用[context save:nil];,否则使用[context rollback];

【讨论】:

  • 仅在复选框上单击它正在更新核心数据。然后我有一些执行其他流程的委托和通知。我不希望复选框的动作触发更新核心数据。
  • 您可以将复选框与绑定分离并通过您自己的数据源通知它,例如数组。然后,当需要保存时,迭代更改的值。
【解决方案2】:

有几种方法可以做到这一点,就 one 复选框的工作而言,它们都是 hack。

但是,如果您有一个用户正在编辑的整个表单,您只需创建一个子 ManagedObjectContext,将复选框和表单的其余部分绑定到 那个 上下文,然后合并或丢弃整个该上下文中的更改取决于用户是点击保存还是取消。

我是this Cocoanetics article on Core Data context stacks 的忠实粉丝。您实际上可能希望您的整个 GUI 在主线程上下文中运行,如果您尝试绕过默认的立即持久性,则保存(当用户确认时)推送到编写器上下文并持久化到磁盘。

我发现子上下文和类支持实体的一个巨大问题是awakeFromInsert getting called multiple times,因此请注意您可能需要处理其他复杂问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-01
    • 2018-09-11
    • 2021-01-19
    • 2022-06-15
    • 1970-01-01
    • 2020-01-29
    • 2018-08-04
    • 1970-01-01
    相关资源
    最近更新 更多