【问题标题】:Modeling an inverse relationship in Core Data在 Core Data 中建模逆向关系
【发布时间】:2012-06-18 17:03:39
【问题描述】:

Core Data 中的关系让我很困惑。我读了又读,但我就是不明白。我想我通常在阅读时感到沮丧并没有帮助。我想做一些非常简单的事情:

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

图片实体:

UsersWhoLikedThePicture(对多):

Destination: User 
Inverse: Picture

UsersWhoAreTaggedInThePicture(对多):

Destination: User
Inverse: Picture

但这在使用中造成了如此多的混淆,我什至无法开始描述。这是不一致的。有人喜欢一张图片会导致他们作为标记用户被删除,喜欢一张图片会导致您对所有其他图片的喜欢被删除。啊,真是一团糟……我的结构看起来还好吗?我将如何建模?

【问题讨论】:

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


    【解决方案1】:

    除了Matthias Bauch的回答,我可以给你一些理解关系的提示。

    首先,当您处理 Core Data 时,您必须考虑对象。通过这种抽象,您可以将模型视为一个图,其中节点是您在模型中创建的实体,而关系是这些实体之间的链接。

    现在,关于关系,它们可以是不同的类型:一对一、一对多和多对多。根据您拥有的关系类型,您可以在对象图中创建不同的链接。例如,如果User 与Picture 具有一对多关系,则意味着对象(NSManagedObject 类型)的每个实例都有指向不同Pictures 的链接。 User 用作源,Pictures 用作目标。

    Core Data 使用反向关系来保持图形的一致性。特别是,当您处理删除规则时,它们很有用。

    每个关系都有一个与之关联的删除规则。 级联意味着如果你删除一个对象,比如User,Core Data 会为你删除链接到它的对象(Pictures)。 拒绝不允许删除链接到 User 的 Pictures。 Nullify 表示从Picture 到User 的链接将被破坏。这并不意味着对象被删除。就对象图而言,这意味着您不再有这些对象之间的链接。 No Action 意味着源被删除,目标始终存在,并且它继续指向一个不再存在的对象。因此,与 Nullify 不同,您需要手动断开该链接。如果不是,您可能会有图表不一致。尽量避免这种关系。

    如果你想知道其他事情,请告诉我。

    编辑

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

    【讨论】:

      【解决方案2】:

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

      正确的方法是这样的:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-03
        • 1970-01-01
        • 2012-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-31
        • 2013-02-20
        相关资源
        最近更新 更多