两个CoreData实体之间可以有多个“to-many”关系吗?

时间:2012-05-12 06:11:49

标签: ios core-data nspredicate nsfetchrequest

我的模型有一个实体“过滤器”和一个实体“颜色”。我希望它们之间有两个“To-Many”关系:“背景”和“前景”。 (即每个“过滤器”包含一组背景颜色和一组前景色,所有类型都为“颜色”)。

我有两个问题。首先,当我设置关系时,“颜色”的反转只能有一个值(我猜这意味着我不能做我想做的事)。其次,我无法弄清楚如何创建谓词来仅获取背景或仅获取前景。我假设以下将返回所有它们合并在一起(如果它一直有效):

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Color"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"filter == %@", self];

我即将通过将Color转换为两个Foreground和Background实体来解决这个问题,但我不想在不理解为什么单个实体无法工作的情况下这样做。我在这里错过了什么吗?

注意:这显然对我来说不直观。我再次遇到了这个问题,但这次我没有使用谓词,所以我没有立即找到问题。我有一个非常相似的设置,但当我试图删除一个孩子时,它最初会消失,但当我重新启动我的应用程序时,将不止一次重新出现。我删除的孩子越多,我就越多。我最终注意到两个关系数组都有相同的孩子,当我查看模型的图形版本时,只有一个关系有一个箭头连接到孩子。最后,我记得以前我遇到过这个问题!我不太了解发生了什么,但显然两个孩子的“数组”以奇怪的方式合并在一起。

1 个答案:

答案 0 :(得分:4)

关于多对多关系的理论

假设您拥有实体CHILD,无论是男孩还是女孩。每个孩子都可以拥有所有兄弟姐妹中的一组(对多)。但是每个孩子在他们所有的1个兄弟和2个姐妹中也可能还有两组(对多)。

“兄弟姐妹”的反向关系是“isSiblingTo”(或兄弟姐妹)。而“兄弟”和“姐妹”的反面将是“isBrotherTo”和“isSisterTo”。

这很简单,因为两个实体都是一样的。

相反,我说我是一个有一套蜡笔和一套玩具的孩子。我可能在这两套中都有我的红色蜡笔,即我必须与它有许多关系。

这一切归结为红色蜡笔既是我的CRAYON又是我的玩具。 和上面的兄弟姐妹一样,孩子的兄弟都是他们的兄弟姐妹,他们的兄弟和姐妹都是他们的兄弟姐妹和姐妹。

更新

你不需要成为这两种关系的一部分。你可以让一个孩子没有兄弟姐妹关系,但兄弟姐妹关系和其他孩子会有相反的关系(这更接近你的颜色+过滤器的例子)

应用于您的示例

所以,如果你有用它,它是可行的。只需考虑他们在日常语言中的关系,并将其设置为isForegroundColorTo和isBackgroundColorTo。

具有多对多关系的数据模型 data model with multiple to-many relations

颜色模型定义 color model definition

过滤器模型定义 filter model definition