Core Data 自反对多关系

Posted

技术标签:

【中文标题】Core Data 自反对多关系【英文标题】:Core Data reflexive to-many relationships 【发布时间】:2012-12-14 19:33:02 【问题描述】:

需要设置一个与自身有一对多关系(自反)的Entity Person。

所以每个人可以有n个子人,基本上是这样的:

Person 是否有两个关系,person 和 sub_person?逆规则如何运作?

【问题讨论】:

【参考方案1】:

如果我正确理解您的要求,您只需定义一个实体Person,以及两个关系:

sub_persons 作为从 PersonPerson 的一对多关系, super_person 作为从 PersonPerson 的一对一关系,

并将它们定义为彼此的反向关系。

【讨论】:

正确。 sub_persons 的逆是 super_person,super_person 的逆是 sub_person。 好的,谢谢 Martin R。你回答了我关于反身对多和多对多关系的问题,我很感激。我现在正试图找出我真正需要的。你能看看我的另一个问题吗:***.com/questions/13918556/… @Log139:Ramy Al Zuhouri 对这个问题的回答是正确的:你有一个多对多的关系。他只是混淆了 sub_friend 和 super_friend。【参考方案2】:

实体当然可以与自身相关,就像双向链表中的节点与其他节点具有下一个上一个关系。请记住,实体就像一个类——它是一种对象,而不是一个特定的对象。因此,例如,您的 Person 实体可能与 Person 有 friends 关系——给定的人可能有很多朋友,他们都是 Person 的实例。

【讨论】:

“我不认为 Core Data 处理多对多关系”——这绝对是错误的,请参阅 Many-to-Many Relationships。【参考方案3】:

Core Data 中绝对有可能以这种方式拥有一个与自身相关的对象。在数据模型的 Table, Graph 编辑器中,按住 control 键并从 Person 画出一条线,然后又回到它自己。这会给你一条线,每端都有一个箭头,都指向 Person。然后重命名关系(parentPerson、subPersons)并在属性检查器中使 subPersons 成为一对多关系。最终结果应如下所示:

这种数据管理风格遵循称为Composite Pattern 的设计模式。

【讨论】:

以上是关于Core Data 自反对多关系的主要内容,如果未能解决你的问题,请参考以下文章

如何为依赖于关系的自定义 Core Data 属性发布通知?

IOS/Core-Data:添加多对多关系

Core Data 添加对象对多关系

Core Data addObject 一对多关系

NSTokenField 代表 Core Data 的多对多关系

Core Data 上的一对多关系