0

我有一个简单的数据模型:父实体与子实体具有可选的一对多关系。反向关系(子 -> 父)是强制性的(非可选的)。

删除子对象后,Core Data 拒绝保存,抱怨子实体中缺少必需的属性。如果反向关系是可选的,错误就会消失。

为什么我不能在合乎逻辑的情况下建立强制性的反向关系(孩子必须有父母)?为什么 Core Data 抱怨删除对象的不一致?这是预期的行为吗?

感谢您的任何澄清。

编辑:根据要求,我附上了我的测试数据模型的图片: 关于删除代码的问题,没有。这一切都是通过在应用程序窗口 nib 中设置的绑定来完成的。您可以在此处加载测试项目:父子测试项目。可能应该提到这个项目是基于架构的。
测试父子Core Data模型
NSArrayControllerNSPersistentDocument

我观察到的行为如下:如果创建的父级没有子级,则文档可以正常保存。如果创建了一个子项,然后又删除了该子项,则在尝试保存文档时会出现错误消息:
父子错误信息

4

3 回答 3

3

我刚刚发现了我自己问题的答案。

我观察到的对象在从关联中删除后仍然存在的问题与控制器和方法NSArrayController的默认操作有关。根据 Apple 文档(NSArrayController -removeObject: method): -remove:-removeObject:

但是,如果接收者的 contentSet 绑定到关系,removeObject: 默认情况下只从关系中删除对象(而不是从对象图中)。但是,您可以为 contentSet 绑定设置“删除时删除对象”选项,在这种情况下,对象被标记为删除以及从关系中删除。

这同样适用于该-remove:方法。在子数组控制器 contentSet 绑定中设置“删除时删除对象”可以解决问题。

于 2012-06-25T18:06:55.053 回答
0

查看您的附加信息,会弹出一件事:删除规则

Cascade让我们想一想你们的children关系可能会发生什么。

Child deleted --> cascade = parent deleted --> possible other orphaned children

也许这就是正在发生的事情?尝试将删除规则设置为Nullify.

于 2012-06-24T04:51:49.680 回答
0

或许你反了?

child与 parent的一对一关系应该是可选的。父母
与孩子的一对多关系应该是可选的。

我刚刚测试了这个设置,它可以工作。

于 2012-06-22T21:33:24.657 回答