核心数据中实体内的实体 - Xcode

时间:2013-06-18 07:10:01

标签: iphone xcode core-data

我正在使用Core Data将信息存储在我正在构建的iPhone应用程序中。

我打算在deck对象中存储词汇表对象,因此任何deck对象都可以有多个词汇表对象。

我想在我的词汇表实体中创建一个属性“Deck ID”,并通过ID将词汇卡与甲板相关联。但是,我不知道这是不是很糟糕?

使用核心数据关系有更好的方法吗?据我所知,关系意味着Deck Entity只有一个Vocabulary对象,也许我错了。

如何有效构建适合我需求的核心数据结构?

感谢。

2 个答案:

答案 0 :(得分:2)

这是正确的方法。您不能在实体中“嵌入”实体。

如果您希望deck实体可以附加vocabulary个实体的多个实例,则需要为{{1}创建单独的实体deck,并在您的vocabulary实体与deck实体之间添加 to-many 关系,以及 to-one 从您的vocabulary实体到您的套牌实体的关系。

以下是Core Data模型中的一对基本实体,用于演示:

Relationship

正如您在图片中看到的那样,vocabulary实体与Deck实体之间存在一个名为vocabularies的多对多关系,其反比关系为Vocabulary。< / p>

deck实体中的vocabularies关系配置如下:

Relationship Configuration 1

并且Deck实体中的deck关系配置如下:

Relationship Configuration 2

请注意,Vocabulary关系为 to-many ,而vocabularies关系则不是。deck。这意味着一个Deck对象可以有多个词汇表,但每个Vocabulary对象只能连接到一个 {{ 1}}对象。这种关系通常表示为

Deck

这是有意义的,因为你可以看到这与连接两个实体的图像中的箭头相同,表示关系的类型。

核心数据的级别高于直接与数据库交互的级别(它适用于您),因此您实际上不需要将其视为数据库。将Core Data视为 对象图 而不是数据库更容易,因为它代表的是:对象的集合,彼此连接< / strong>,而不是必须手动连接的一组不相交的表。

答案 1 :(得分:1)

核心数据的部分学习曲线是停止将其视为关系数据库。

最好将它视为对象图 - 对象链接在一起的方式,而不是由标识符连接的表。

在你的情况下,你应该做的是拥有一个甲板对象和一个词汇表对象并建立如下关系:

deck <-->> vocabulary

(当人们谈论核心数据时,你会看到很多这种表示法)

这意味着甲板对象与词汇对象具有一对多的关系,词汇对象与甲板对象具有一对一的关系。让这种关系在CD中发挥重要作用。

如果你这样做,就不需要手动创建id和一个连接对象的表,它将在内部为你管理。您需要做的就是从关系中添加和删除对象。对于词汇对象,这只是甲板类型的单个对象,对于甲板,它将是一组词汇类型的对象。将关系双向化意味着,例如,如果您创建一个词汇表对象并将其分配给一个套牌,那么该套牌对象将自动将该词汇表对象添加到其词汇对象集中。