Macos 核心数据:删除具有非可选关系的对象后保存错误

Macos 核心数据:删除具有非可选关系的对象后保存错误,macos,core-data,relationship,Macos,Core Data,Relationship,我有一个简单的数据模型:父实体与子实体处于可选的一对多关系中。反向关系(子->父)是必需的(非可选) 删除子对象后,核心数据拒绝保存,抱怨子实体中缺少必需的属性。如果将反向关系设置为可选,则错误将消失 为什么我不能有一个逻辑上的强制性反向关系(即孩子必须有父母)?为什么核心数据抱怨被删除对象的不一致性?这是预期的行为吗 谢谢你的澄清 编辑:根据要求,我正在添加我的测试数据模型的图片: 至于删除代码的问题,没有。这一切都是通过在应用程序窗口nib中设置的绑定来完成的。您可以在此处加载测试项目:。

我有一个简单的数据模型:父实体与子实体处于可选的一对多关系中。反向关系(子->父)是必需的(非可选)

删除子对象后,核心数据拒绝保存,抱怨子实体中缺少必需的属性。如果将反向关系设置为可选,则错误将消失

为什么我不能有一个逻辑上的强制性反向关系(即孩子必须有父母)?为什么核心数据抱怨被删除对象的不一致性?这是预期的行为吗

谢谢你的澄清

编辑:根据要求,我正在添加我的测试数据模型的图片:

至于删除代码的问题,没有。这一切都是通过在应用程序窗口nib中设置的绑定来完成的。您可以在此处加载测试项目:。可能应该提到的是,该项目基于
NSPersistentDocument
体系结构

我观察到的行为如下:如果创建的父对象没有子对象,则文档可以正常保存。如果创建并删除了子文档,则尝试保存文档时会出现错误消息:

也许你是从另一个角度得到的

子对象与父对象之间的“一对一”关系应是可选的。
父母与子女的多对多关系应该是可选的


我刚刚测试了这个设置,它运行正常。

也许你用另一种方法得到了它

子对象与父对象之间的“一对一”关系应是可选的。
父母与子女的多对多关系应该是可选的


我刚刚测试了这个设置,它运行正常。

查看您的其他信息,有一件事突然出现:删除规则

让我们思考一下,您的
子关系的
级联设置可能会发生什么

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

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

查看您的其他信息,会弹出一条消息:删除规则

让我们思考一下,您的
子关系的
级联设置可能会发生什么

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

也许这就是正在发生的事情?尝试将删除规则设置为“无效”

我刚刚找到了我自己问题的答案

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

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


这同样适用于
-remove:
方法。在子数组控制器内容集绑定中设置“删除时删除对象”解决了这个问题。

我刚刚找到了我自己问题的答案

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

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


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

请向我们显示模型、删除代码和错误消息。请向我们显示模型、删除代码和错误消息。是的,这正是我所拥有的(请参阅文章中添加的详细信息)。到目前为止,我并没有在代码中这样做,我也不打算在这个问题之前这样做。也许在持久化文档堆栈中发生了一些奇怪的事情,但我希望这些简单的事情能够开箱即用。到目前为止,我并没有在代码中这样做,我也不打算在这个问题之前这样做。也许在持久性文档堆栈中发生了一些奇怪的事情,但我希望这些简单的事情能够开箱即用。根据苹果公司的说法,我的模型包括删除规则似乎是正确的,假设一个孩子必须有一个且只有一个家长(请参阅)。但我发现我错在哪里:-)(见我自己的答案)。根据苹果公司的说法,我的模型似乎是正确的,包括删除规则,假设一个孩子必须有一个且只有一个父母(见)。但是我发现我错在哪里:-)(见我自己的答案)。谢谢你发这个帖子。这让我困惑了好长时间。谢谢你发这个帖子。这使我困惑了好几年。