两个 NSArrayController 绑定到同一个 NSManagedObjectContext

问题描述

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

解决方法

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

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