无法使用核心数据“一对多”关系执行令人满意的保存

时间:2014-05-10 16:35:12

标签: macos core-data save one-to-many

我的应用程序有一个类似于库的层次结构的数据集:整本书中的章节和章节中有页面,库中有书籍。因此,我组织了我的数据模型,以便单例库实体与书籍实体具有多对多的关系(反之); books实体与章节实体具有多对多的关系,章节实体与页面实体具有多对多的关系。每个实体都绑定到一个数组控制器,其内容在绑定到其数组控制器的表视图中表示,因此每个“对多”数据项都有一个数组控制器。应用程序的用户可以通过与窗口控制台交互来修改该数据的内容,该窗口控制台具有表示每个数据层次结构的表视图:书籍表视图,章节表视图和页面表视图。因此,例如,如果用户希望添加或删除书籍的章节条目,他们在窗口中选择书籍,然后使用相邻的添加或删除按钮(绑定到章节阵列控制器)来更改章节数据这本书。除非用户进行更改然后保存,否则一切正常。显然,当对托管对象上下文进行保存时,跨数据层次结构不会发生更改 - 只有特定的“对多”数据项。例如,如果用户从书中删除章节,则仅删除章节实体数据。页面数据在核心数据存储库中保持不变(它是“孤立的”)。显然,我不了解核心数据如何与'to-many'数据关系相关。我在设计中做错了什么,以防止保存在整个数据层次结构中产生级联效应?

1 个答案:

答案 0 :(得分:0)

核心数据关系有一个"删除规则"它控制着源码发生了什么 关系的对象被删除。

在您的情况下,设置"删除规则"是有意义的。为了多对多的关系 预订 - >>章 - >>页 to" Cascade",以便例如删除一本书自动删除所有相关的 章节,反过来删除所有相关页面。 (你明白为什么叫它" cascade"!)

反向(对一)关系页面 - >章 - >本书应设置为" Nullify", 因此,例如,删除章节会删除书中的章节。

有关详细信息,请参阅"Relationship Delete Rules" 在"核心数据编程指南"。