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

Posted

技术标签:

【中文标题】NSPredicate 用于两级深对多关系中的项目,无直接关系【英文标题】:NSPredicate for items in two-levels deep to-many relationship, w/o direct relationship 【发布时间】:2014-04-16 17:48:26 【问题描述】:

我正在尝试为以下(简化)模型构建单个 NSFetchRequest 谓词:

Category 和多个 Brands 之间存在简单的多对多关系。

每个Brand 都有一个modelNumbersData 属性,它是二进制数据,NSString modelNumbers 数组的序列化,在Brand 对象的瞬态属性中公开。

Brands 和Models 之间没有直接关系。关系是ModelmodelNumber 可能在BrandmodelNumbers 瞬态属性中。

我想构建一个NSPredicate 查询来获取特定Category 下的所有Model 对象

Brand 获取Models 很容易,我可以做到"modelNumber IN $FETCH_SOURCE.modelNumbers"。我现在如何扩展此查询以源自该类别?看来我需要SUBQUERY

此外,我正在做一个NSFetchRequest,所以除非我弄错了,否则我需要从"SELF.modelNumber IN (...)" 开始,以便我们从所有Models 中进行选择。

提前致谢!

【问题讨论】:

作为更新,如果我首先获取所有Models,我可以过滤我想要的内容:SUBQUERY(%@.brands, $brand, $brand.modelNumbers CONTAINS SELF.modelNumber).@count > 0 但是我如何将其组合成一个步骤/查询?似乎它需要反过来...... 【参考方案1】:

好的,我先到了。供参考,以下作品:

SUBQUERY(%@.brands, $brand, $brand.modelNumbers CONTAINS $modelNumber).@count > 0

我认为我主要遇到的问题是忽略了.@count 组件。仍然不完全理解这一点,但似乎对所有SUBQUERY 语句都是必要的。

【讨论】:

以上是关于NSPredicate 用于两级深对多关系中的项目,无直接关系的主要内容,如果未能解决你的问题,请参考以下文章

NSPredicate 用于多对多关系

用于多对多关系的 NSPredicate

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

NSPredicate 在核心数据中的多对多关系

NSFetchedResultsController, NSPredicate 以对多关系检索子对象

核心数据:NSPredicate 一对多对多关系