CoreData中的关系和实体

时间:2011-11-19 01:30:24

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

我有三个实体,A,B和C.

A与B具有多对多的关系 和B与A有很多关系

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

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

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

编辑:澄清:

enter image description here

1 个答案:

答案 0 :(得分:1)

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

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

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