在 Core Data 中建模逆向关系
Posted
技术标签:
【中文标题】在 Core Data 中建模逆向关系【英文标题】:Modeling an inverse relationship in Core Data 【发布时间】:2012-06-18 17:03:39 【问题描述】:Core Data 中的关系让我很困惑。我读了又读,但我就是不明白。我想我通常在阅读时感到沮丧并没有帮助。我想做一些非常简单的事情:
我有一个名为 Pictures
的实体和一个名为 User
的实体。我希望用户能够喜欢和标记图片中的其他人,所以每个Picture
实体都有两个关系:
图片实体:
UsersWhoLikedThePicture(对多):
Destination: User
Inverse: Picture
UsersWhoAreTaggedInThePicture(对多):
Destination: User
Inverse: Picture
但这在使用中造成了如此多的混淆,我什至无法开始描述。这是不一致的。有人喜欢一张图片会导致他们作为标记用户被删除,喜欢一张图片会导致您对所有其他图片的喜欢被删除。啊,真是一团糟……我的结构看起来还好吗?我将如何建模?
【问题讨论】:
【参考方案1】:除了Matthias Bauch的回答,我可以给你一些理解关系的提示。
首先,当您处理 Core Data 时,您必须考虑对象。通过这种抽象,您可以将模型视为一个图,其中节点是您在模型中创建的实体,而关系是这些实体之间的链接。
现在,关于关系,它们可以是不同的类型:一对一、一对多和多对多。根据您拥有的关系类型,您可以在对象图中创建不同的链接。例如,如果User
与Picture
具有一对多关系,则意味着对象(NSManagedObject
类型)的每个实例都有指向不同Picture
s 的链接。 User
用作源,Picture
s 用作目标。
Core Data 使用反向关系来保持图形的一致性。特别是,当您处理删除规则时,它们很有用。
每个关系都有一个与之关联的删除规则。 级联意味着如果你删除一个对象,比如User
,Core Data 会为你删除链接到它的对象(Picture
s)。 拒绝不允许删除链接到 User
的 Picture
s。 Nullify 表示从Picture
到User
的链接将被破坏。这并不意味着对象被删除。就对象图而言,这意味着您不再有这些对象之间的链接。 No Action 意味着源被删除,目标始终存在,并且它继续指向一个不再存在的对象。因此,与 Nullify 不同,您需要手动断开该链接。如果不是,您可能会有图表不一致。尽量避免这种关系。
如果你想知道其他事情,请告诉我。
编辑
查看Core Data Programming Guide Relationships section 了解更多信息。
【讨论】:
【参考方案2】:我不知道这是否可能,但听起来您对两个关系使用了相同的反向目标。不要那样做。
正确的方法是这样的:
【讨论】:
以上是关于在 Core Data 中建模逆向关系的主要内容,如果未能解决你的问题,请参考以下文章
我如何在 Core Data 中为球队、比赛和主客场球队关系建模?
在 Core Data Editor 中建模 JSON 结果