核心数据(添加唯一约束后):注释:修复丢失的删除传播以实现对多关系

Posted

技术标签:

【中文标题】核心数据(添加唯一约束后):注释:修复丢失的删除传播以实现对多关系【英文标题】:Core Data (After Adding Unique Constraint) : annotation: repairing missing delete propagation for to-many relationship 【发布时间】:2018-03-06 11:08:19 【问题描述】:

在我们添加唯一键即约束后开始出现此问题。

频繁更新会议管理对象会从会议管理对象中删除具有一对一反比关系的事件管理对象。

错误CoreData:注释:修复对象0x60c00009c4d0(0x60c000621e40)上的一对多关系meetingList丢失的删除传播,错误错误0x60800009ac20(0x60800023a360)

数据模型

我的核心数据模型中有三个实体,即

(CDEvent, CDMeeting, CDMLCheckin) .

实体属性和关系如下所述:

关系

属性: CDEvent CD会议

CDMLCheckin

唯一约束:

CDEvent 实体具有 eventUUID 作为唯一约束。 CDMeeting 实体具有 meetingUUID 作为唯一约束。

关系

CDEvent >CDMeeting 从 CDEventCDMeeting 是与删除规则级联的一对多关系,从 CDMeeting 到 CDEvent 的反向关系是与删除规则无效的一对一关系。 CDEvent >CDMLCheckin 从 CDEventCDMLCheckin 是与删除规则级联的一对多关系,从 CDMLCheckin 到 CDEvent 的反向关系是与删除规则无效的一对一关系。

完整描述:https://docs.google.com/document/d/1y2DQhBBLqjAP9eWbx5YpQhH7oVigxT_mcJDnPLlOMtQ/edit?usp=sharing

注意

如果我从 CDEvent 中删除唯一约束 eventUUID 一切正常。

请在这里帮助我们,因为我们受到了一个多星期的打击:(

【问题讨论】:

同样的问题,即使我也面临。如果有人知道解决方案,请帮助我..... 【参考方案1】:

希望我能帮上忙,对多对关系实体有一个独特的约束,您需要牢记一些要点

使用每个 CoreData 关系的反向关系 唯一约束属性永远不应该是可选的

当你创建 NSManagedObjectContext 时,确保你设置了 MergePolicy。

[_context setMergePolicy: mergePolicy];

NSMergeByPropertyStoreTrumpMergePolicy

NSMergeByPropertyObjectTrumpMergePolicy

NSOverwriteMergePolicy

您也可以尝试将无效删除规则更改为无操作吗?

【讨论】:

我在教程中设置了唯一约束后做了所有这些,但仍然面临同样的问题。另外,我不能将删除规则设置为无操作,因为它会导致指针悬空 通过设置唯一约束 eventUUID 使其成为强制性的,因此级联规则将失败。您是否尝试从 CDMeeting 和 CDMLCheckin 表中更改名称“eventUUID”,这样您就不会强制使用它。苹果文档。 “您还可以指定对关系的约束,例如强制它们或不能超过一定数量。”大约 6 个月前我遇到了同样的问题,我通过实现自己的删除算法来解决它。什么时候抛出错误?我只在文档中看到了 CDMLCheckin 的删除 @lonescu Vlad,我试图重命名 eventUUID 但没有成功。你能解释一下我如何实现我自己的删除算法。 能不能做个demo git,会容易很多 我忘了提,因为我还有一个实体“CDEventMetaData”,它与“CDEvent”有一对一的关系,当我尝试更新“CDEventMetaData”实体时会出现问题。请查看第 16 页的文档,我已经更新了“CDEvent”类方法的日志。 @IonescuVlad

以上是关于核心数据(添加唯一约束后):注释:修复丢失的删除传播以实现对多关系的主要内容,如果未能解决你的问题,请参考以下文章

数据库导入后核心数据唯一约束失败

如何修复“无法添加或更新子行:外键约束失败”[重复]

如何在重新启动 xcode 7.1 时修复丢失的约束

「MySQL」- 约束详解

如何在 django 的核心模型中添加“unique_together”约束?

项目中遇到逻辑删除问题