2011-11-26 129 views
18

我是核心数据建模的新手,我很难理解一对多关系如何工作。CoreData - 一对多建模关系以一对一形式出现

我有一个叫做Task的父实体,它可以有多个Comment实体的实例。我将其模拟为:在Comments上,与Task的关系称为task,其中Task实体为目的地。在Task上,称为comments的关系,其中Comment作为其目的地,并且两个关系彼此相反。

未定义逆函数会导致警告或错误消息。虽然这种方式建模的作品,我注意到,一旦我为给定的Task创建第二个评论,第一个被替换(一对一关系)。

什么是正确的方式告诉核心数据模型,这种关系允许在一个Task许多意见?

此外,由于CoreData似乎自行管理主键,我将如何创建NSPredicate来检索给定任务的所有注释?

感谢您的任何建议!

回答

42

首先你需要设置在Task实体plural选项,在您的​​选择它,然后选择Task实体来commentsrelationship属性,你应该能够看到这个enter image description here

有一个plural选项一定要检查出来。如果您使用生成的类以及您使用的sqlite商店,则必须重新创建您的NSManagedObject,您必须删除并重新生成,以便它不会抱怨新模式与旧模式不一样。

要检查您是否有一对多的关系,您的Task实体应该有一个名为comments的属性,它是一个NSSet的类类型的非评论。

如果您想检索给定任务的所有注释,则需要重复执行该任务的NSSet(comments)属性。

+0

谢谢!我甚至不知道这些选项是可用的。我想我一直在关闭右窗格的情况下编辑我的模型。我目前不使用生成的类,而是测试Core Data如何命名setter和getters(以及关系)。 – tutiplain