【问题标题】:Two NSArrayControllers bound to same NSManagedObjectContext两个 NSArrayControllers 绑定到同一个 NSManagedObjectContext
【发布时间】:2021-07-15 06:17:03
【问题描述】:

我有两个 nib 文件,每个文件都有自己的窗口,由来自相同核心数据托管对象上下文 (MOC) 的数据填充,但每个都绑定到不同的数组控制器。问题是,当我在一个窗口的数组控制器中删除一个数据对象时,即使在保存通用 MOC 并重新启动程序之后,它仍然存在于另一个窗口的数组控制器中。要永久删除不需要的数据对象,我必须在每个窗口分别删除它。这似乎不是核心数据应该工作的方式。使用相同 MOC 的数组控制器不应该有一个共同的持久数据源吗?

【问题讨论】:

  • 是的,使用相同 MOC 和实体的阵列控制器包含相同的数据(如果 fetchPredicatefilterPredicatenil)。请张贴minimal reproducible example
  • 感谢 Willeke 证实了我的假设,即绑定到公共 MOC 的 NSArrayControllers 应该反映该公共 MOC 的数据。

标签: swift objective-c core-data cascading-deletes nsarraycontroller


【解决方案1】:

对于绑定数组控制器的设置,仅将窗口的“删除”按钮连接到 NSControllerArray 的“删除:”方法是不够的。相反,我将此方法子类化并指定目标数据对象的直接 MOC 删除,如下所示:

- (void)remove:(id)sender
{ 
    [MOC deleteObject:[[self selectedObjects] lastObject]];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 2019-08-15
    • 1970-01-01
    相关资源
    最近更新 更多