iphone - CoreData 中的关系和实体

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

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

其中A与B有一对多关系
B 与 A 是一对多关系

然后 C 与 A 具有一对一(正确的术语?)关系,并且与 B 具有一对一关系。

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

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

编辑:澄清:

enter image description here

最佳答案

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

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

要将 C.a 限制为 C.b.bs 中的 A 之一,您需要编写一些代码。如果 C.a 只设置在一个地方,您可以选择在该代码中实现限制。如果限制对于 C 的正确操作至关重要,您可以改为(或另外)选择向 C.a 的 setter 添加一个检查,以验证 A 是允许的之一。您可能还需要修复 C.b 的 setter ,以便如果 C.b 发生变化,它会验证 C.a 是否仍然有效并在无效时做一些适当的事情(清除 C.a,选择一个新的 C.a,拒绝接受新的 C.b,发布通知,抛出异常,无论如何)。

关于iphone - CoreData 中的关系和实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8191169/

相关文章:

iphone - 如何在 Objective-C 中使用 UIWebView 来显示网页

iphone - 如何检测其他应用程序是否正在播放背景音频?

ios - SWRevealViewController 无法从 appdelegate.m 调用

iphone - 如何知道 StoreKit In App Purchases 导致了 applicationWillResignActive?

iphone - UITablViewCell 上的 MKMapView 崩溃

iphone - 在 iOS7 中处理一个 View Controller 的自动旋转

ios - 嵌入在容器 View 中的 UINavigationController,显示大小错误的 TableView Controller

ios - 为什么应用程序暂停时事件指示器仍在旋转?

iphone - 在 UITableViewController 中添加 subview

ios - 在 ARC 下,IBOutlets 应该强还是弱?