建模核心数据中的反向关系

时间:2012-06-18 17:03:39

标签: iphone objective-c ios core-data relationship

核心数据中的关系让我很困惑。我已阅读并阅读,但我不明白。我想在阅读时我通常会感到沮丧,这无济于事。我想做一些非常简单的事情:

我有一个名为Pictures的实体和一个名为User的实体。我希望用户能够喜欢并标记图片中的其他人,因此每个Picture实体都有两种关系:

图片实体:

UsersWhoLikedThePicture(to-many):

Destination: User 
Inverse: Picture

UsersWhoAreTaggedInThePicture(to-many):

Destination: User
Inverse: Picture

但是这导致混合使用,我甚至无法开始描述。这是不一致的。有人喜欢图片会导致他们被删除为标记用户,并且像一张图片会导致您删除所有其他图片中的喜欢。啊,这太乱了..我的结构看起来还不错?我该如何塑造这个?

2 个答案:

答案 0 :(得分:3)

除了 Matthias Bauch 之外,我还可以给你一些提示来理解人际关系。

首先,当您处理核心数据时,您必须根据对象进行思考。通过这种模式,您可以将模型视为一个图形,其中节点是您在模型中创建的实体,而关系是这些实体之间的链接。

现在,关于人际关系,他们可能有不同的类型:一对一,一对多和多对多。根据您拥有的关系类型,您可以在对象图中创建不同的链接。例如,如果UserPicture具有多对多关系,则表示对象的每个实例(类型NSManagedObject)都有指向不同Picture的链接。 User用作源Picture s作为目标。

Core Data使用反向关系来维护图表的一致性。特别是,当您处理删除规则时,它们非常有用。

每个关系都有一个与之关联的删除规则。 级联表示如果删除对象,比如User,则核心数据会删除与您链接的对象(Picture)。 拒绝不允许在User链接到Picture时删除Picture Nullify 表示从User到{{1}}的链接将被破坏。这并不意味着删除对象。就对象图而言,这意味着您不再拥有这些对象之间的链接。 无操作表示删除了源,目标始终存在,并且它继续指向不再存在的对象。因此,与 Nullify 不同,您需要手动中断该链接。如果不是,您可能会出现图表不一致。尽量避免这种关系。

如果您想了解其他内容,请与我联系。

修改

请查看Core Data Programming Guide Relationships section了解更多信息。

答案 1 :(得分:2)

我不知道这是否可能,但听起来你对两个关系使用了相同的反目标。不要那样做。

正确的方法是这样的:

enter image description here