4

我的模型有一个实体“过滤器”和一个实体“颜色”。我想在它们之间建立两个“多对多”关系:“背景”和“前景”。(即每个“过滤器”包含一组背景颜色和一组前景色,所有类型均为“颜色”)。

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

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

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

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

4

1 回答 1

4

是的。

多对多关系理论

假设你有一个实体 CHILD,它不是男孩就是女孩。每个孩子都可以有一组(对多)他们所有的兄弟姐妹。但是每个孩子还可以再拥有两组(对多)他们的所有 1:兄弟和 2:姐妹。

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

这非常简单,因为两个实体都相同。

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

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

更新:

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

应用于您的示例

所以,如果你有它的用途,它是可行的。想想他们在日常语言中的关系,并将相反的设置为 isForegroundColorTo 和 isBackgroundColorTo。

具有多对多关系的数据模型 具有多对多关系的数据模型

颜色模型定义 颜色模型定义

过滤器模型定义 过滤器模型定义

于 2012-05-12T09:59:20.650 回答