NSPredicate 用于多对多关系

Posted

技术标签:

【中文标题】NSPredicate 用于多对多关系【英文标题】:NSPredicate for many - to - many relationship 【发布时间】:2015-04-21 06:35:32 【问题描述】:

我有两个实体 OffersCategories,它们通过多对多关系连接。

在实体Offers中有一个布尔属性叫做played和hasCategories,它是与Categories

在实体Categories中还有一个名为following的布尔属性。

我想获取 played = true 的所有 Offers 及其所有类别 following = true

我该怎么做?

【问题讨论】:

【参考方案1】:

这样的事情应该可以工作:

NSPredicate(format:"played = TRUE AND SUBQUERY(hasCategories, $c, $c.following = FALSE).@count = 0")

子查询检查所有相关类别都没有following == false

【讨论】:

你能解释一下 $c 是什么意思吗? @ChristosHadjikyriacou:它是一个“局部循环变量”,依次设置为“hasCategories”关系的每个元素。 (不幸的是,SUBQUERY 没有很好的文档记录。您会在 SO 上找到更多示例。) 非常感谢您的帮助。但它不起作用。我做了类似这样的事情 insted fetchRequest.predicate = NSPredicate(format: "played == NO and ANY hasCategories IN %@",Category.getAllFollowingCategories(self.managedObjectContext)) 但现在我必须关闭并重新打开应用程序才能获得结果出现 它给了我零结果。 @ChristosHadjikyriacou:奇怪。我做了一个快速测试,它按预期工作。

以上是关于NSPredicate 用于多对多关系的主要内容,如果未能解决你的问题,请参考以下文章

用于多对多关系的 NSPredicate 过滤器

具有多对多关系的核心数据 NSPredicate

具有多对多关系的 NSPredicate

NSPredicate 在多对多关系中

核心数据 - 从多对多关系构建 NSPredicate

NSPredicate 用于两级深对多关系中的项目,无直接关系