我有一个包含多对多关系的CoreData数据模型。事实证明,NSPredicate不支持多对多关系。来自CoreData.pdf:“在谓词中的键路径中只能有一个到多个元素。”
作为食谱示例:许多食谱和许多成分。配方可以有许多成分,其中“盐”可以是一种,而“盐”则用于许多配方中。这是一种自然的多对多关系。
建议的解决方法是什么?
CoreData是个坏主意,我应该回到SQLite吗?
答案 0 :(得分:5)
我的理解是,您可以通过添加中间实体将任意多对多关系划分为单独的一对多关系。
你有:
食谱有很多成分
成分有很多食谱。
创建一个新的RecipeIngredient实体,以便: 食谱有许多食谱成分 成分有很多食谱成分 RecipeIngredient有一个食谱和一个成分。
答案 1 :(得分:1)
这个问题实际上让我走错了路,遇到了一个问题。事实证明,您可以使用谓词查询多对多关系。您无法进一步查询A <<-->> B <<-->> C
我使用的谓词(在Story <<-->> Team
的模型中)就是这个......
[NSPredicate predicateWithFormat:@"SUBQUERY( teams, $t, $t IN %@ ).@count > 0", teams)];
此谓词用于针对Story实体的获取请求。第二个“团队”是我正在搜索故事的一组或一组团队。 SUBQUERY格式对我来说有点混乱,所以我会注意到它可以被解读为“对于当前故事的团队集合中的每个团队,看看它是否在其他集合(团队)中。”
希望这有帮助。