核心数据模型

时间:2014-02-15 06:04:46

标签: ios core-data

我正在努力为我的应用创建合适的Core Data模型。我希望有人可以提供一些指导。

我有两个实体 - “目标”和“项目”。目标实体仅包含目标描述,但任何目标可能具有任意数量的子目标,并且这些子目标可以在树结构中扩展多个级别。子目标将包含在同一实体中,因此可能目标实体将包含指向“父”的指针,这将是任何子目标的父目标。

还会有一个“Items”实体包含几个文本字段和一些二进制项,并且必须链接(理想情况下,通过唯一标识符,可能是objectID)到特定目标或子目标项目( s)与...有关。

我完全摸索如何设置这个模型。我知道每个实体需要具备什么属性,但是关系,尤其是目标和“子目标”之间的关系,让我感到难过。我似乎无法在互联网上的核心数据中找到任何树形结构的好例子,甚至我在核心数据上的几本书似乎都没有解决它。

这里的任何人都可以帮助一位老SQL程序员在Core Data中与这些关系走向正确的方向吗?感谢。

4 个答案:

答案 0 :(得分:3)

您是否尝试过从目标到自身创建一对多,以及从目标到项目的一对一创建?我唯一担心的是循环引用。

另请阅读Relationships and Fetched Properties中的CoreData Programming Guide

答案 1 :(得分:1)

QED是正确的,你可以在目标上创建一对多的关系(称之为子目标)以及目标上的一对一关系(称之为parentGoal)并将它们设置为相互反转。

然后在目标实体上创建另一个到多个关系(称之为项目),其中逆是项目实体上的一对一关系(称之为目标)。然后你就完全了。您不需要使用唯一ID链接项目,只需将它们添加到项目关系中即可。

另请注意,如果您确实要为项目指定唯一ID,请不要使用objectID。 objectID应仅用作临时ID,因为它们不能保证保持不变。实际上,如果您进行了核心数据迁移,它们将会发生变化。

答案 2 :(得分:1)

以下是如何完成的:

managed object model

您可以在模型编辑器中设置从目标到项目的多对多关系。 不要使用任何ID,外键等。这是老式的数据库思维 - 你可以忘掉它。这里我们只处理一个对象图。数据库层只是用于持久化数据的实现细节。

在实体目标中再创建两个关系:一对一称为父对象,一对多称为子目标。使它们彼此相反。简单!

enter image description here

答案 3 :(得分:-1)

一种方法,虽然不是很好,但是创建另一个实体,比如subGoal,每个goal都有一个subGoalsubGoal的每个对象都有很多goal