【问题标题】:Relationships and entities in CoreDataCoreData 中的关系和实体
【发布时间】:2012-01-01 17:36:10
【问题描述】:

我有三个实体,A、B 和 C。

A 与 B 有一对多关系
B和A是一对多的关系

那么 C 与 A 是一对一(正确的术语?)关系,与 B 是一对一关系。

但是我想要它,所以 C 与 A 的关系必须是 A 的一个实例,该实例与与 C 相关的 B 有关系。

通常在代码中我会使用 NSArrays 代替关系,然后在 C 中存储所需实例的索引。这是我第一次使用 CoreData,所以大部分我都不确定。

编辑:澄清:

【问题讨论】:

    标签: iphone objective-c cocoa-touch core-data


    【解决方案1】:

    首先,如果您避免使用b 来表示几个不同的事情,那么讨论您的情况会更容易。您的图表中有四种关系;为了便于讨论,您可以将它们命名为 defg

    要回答您的问题,您不能也不需要在模型中包含您所说的那种限制。该模型定义了管理对象的种类 之间的关系,但它没有说明单个对象的任何内容。在学习 Core Data 时,尝试从对象的角度思考通常会更好,但您应该知道,您在模型中定义的实体类似于关系数据库中的表:它们定义 can存储,而不是代码应该必须(或不得)存储的内容。

    要将 C.a 限制为 C.b.bs 中的 A 之一,您需要编写一些代码。如果 C.a 只设置在一个地方,您可能会选择在该代码中实现限制。如果限制对于 C 的正确操作是必不可少的,那么您可以改为(或另外)选择向 C.a 的设置器添加一个检查,以验证 A 是允许的之一。您可能还需要修复 Cb 的设置器,以便如果 Cb 更改,它会验证 Ca 仍然有效,如果不是,则执行适当的操作(清除 Ca,选择新的 Ca,拒绝接受新的 Cb,发布通知, 抛出异常,随便)。

    【讨论】:

    • 谢谢你,我怎样才能覆盖设置器,通常我会正确设置我自己的设置器。但 CoreData 必须做的不仅仅是普通的 setter(否则为什么要使用 @dynamic?)?
    • @Jonathan。请参阅this question 了解如何编写自己的核心数据设置器。 Apple 的文档也是 talks about customizing Core Data accessors.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 2014-12-31
    • 2023-03-19
    相关资源
    最近更新 更多