我正在努力为我的应用创建合适的Core Data模型。我希望有人可以提供一些指导。
我有两个实体 - “目标”和“项目”。目标实体仅包含目标描述,但任何目标可能具有任意数量的子目标,并且这些子目标可以在树结构中扩展多个级别。子目标将包含在同一实体中,因此可能目标实体将包含指向“父”的指针,这将是任何子目标的父目标。
还会有一个“Items”实体包含几个文本字段和一些二进制项,并且必须链接(理想情况下,通过唯一标识符,可能是objectID)到特定目标或子目标项目( s)与...有关。
我完全摸索如何设置这个模型。我知道每个实体需要具备什么属性,但是关系,尤其是目标和“子目标”之间的关系,让我感到难过。我似乎无法在互联网上的核心数据中找到任何树形结构的好例子,甚至我在核心数据上的几本书似乎都没有解决它。
这里的任何人都可以帮助一位老SQL程序员在Core Data中与这些关系走向正确的方向吗?感谢。
答案 0 :(得分:3)
您是否尝试过从目标到自身创建一对多,以及从目标到项目的一对一创建?我唯一担心的是循环引用。
另请阅读Relationships and Fetched Properties中的CoreData Programming Guide。
答案 1 :(得分:1)
QED是正确的,你可以在目标上创建一对多的关系(称之为子目标)以及目标上的一对一关系(称之为parentGoal)并将它们设置为相互反转。
然后在目标实体上创建另一个到多个关系(称之为项目),其中逆是项目实体上的一对一关系(称之为目标)。然后你就完全了。您不需要使用唯一ID链接项目,只需将它们添加到项目关系中即可。
另请注意,如果您确实要为项目指定唯一ID,请不要使用objectID。 objectID应仅用作临时ID,因为它们不能保证保持不变。实际上,如果您进行了核心数据迁移,它们将会发生变化。
答案 2 :(得分:1)
以下是如何完成的:
您可以在模型编辑器中设置从目标到项目的多对多关系。 不要使用任何ID,外键等。这是老式的数据库思维 - 你可以忘掉它。这里我们只处理一个对象图。数据库层只是用于持久化数据的实现细节。
在实体目标中再创建两个关系:一对一称为父对象,一对多称为子目标。使它们彼此相反。简单!
答案 3 :(得分:-1)
一种方法,虽然不是很好,但是创建另一个实体,比如subGoal
,每个goal
都有一个subGoal
,subGoal
的每个对象都有很多goal
。