核心数据中的关系让我很困惑。我已阅读并阅读,但我不明白。我想在阅读时我通常会感到沮丧,这无济于事。我想做一些非常简单的事情:
我有一个名为Pictures
的实体和一个名为User
的实体。我希望用户能够喜欢并标记图片中的其他人,因此每个Picture
实体都有两种关系:
图片实体:
UsersWhoLikedThePicture(to-many):
Destination: User
Inverse: Picture
UsersWhoAreTaggedInThePicture(to-many):
Destination: User
Inverse: Picture
但是这导致混合使用,我甚至无法开始描述。这是不一致的。有人喜欢图片会导致他们被删除为标记用户,并且像一张图片会导致您删除所有其他图片中的喜欢。啊,这太乱了..我的结构看起来还不错?我该如何塑造这个?
答案 0 :(得分:3)
除了 Matthias Bauch 之外,我还可以给你一些提示来理解人际关系。
首先,当您处理核心数据时,您必须根据对象进行思考。通过这种模式,您可以将模型视为一个图形,其中节点是您在模型中创建的实体,而关系是这些实体之间的链接。
现在,关于人际关系,他们可能有不同的类型:一对一,一对多和多对多。根据您拥有的关系类型,您可以在对象图中创建不同的链接。例如,如果User
与Picture
具有多对多关系,则表示对象的每个实例(类型NSManagedObject
)都有指向不同Picture
的链接。 User
用作源Picture
s作为目标。
Core Data使用反向关系来维护图表的一致性。特别是,当您处理删除规则时,它们非常有用。
每个关系都有一个与之关联的删除规则。 级联表示如果删除对象,比如User
,则核心数据会删除与您链接的对象(Picture
)。 拒绝不允许在User
链接到Picture
时删除Picture
。 Nullify 表示从User
到{{1}}的链接将被破坏。这并不意味着删除对象。就对象图而言,这意味着您不再拥有这些对象之间的链接。 无操作表示删除了源,目标始终存在,并且它继续指向不再存在的对象。因此,与 Nullify 不同,您需要手动中断该链接。如果不是,您可能会出现图表不一致。尽量避免这种关系。
如果您想了解其他内容,请与我联系。
修改强>
答案 1 :(得分:2)
我不知道这是否可能,但听起来你对两个关系使用了相同的反目标。不要那样做。
正确的方法是这样的: