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
和多个 Brand
s 之间存在简单的多对多关系。
每个Brand
都有一个modelNumbersData
属性,它是二进制数据,NSString
modelNumbers 数组的序列化,在Brand
对象的瞬态属性中公开。
Brand
s 和Model
s 之间没有直接关系。关系是Model
的modelNumber
可能在Brand
的modelNumbers
瞬态属性中。
我想构建一个NSPredicate
查询来获取特定Category
下的所有Model
对象。
为Brand
获取Model
s 很容易,我可以做到"modelNumber IN $FETCH_SOURCE.modelNumbers"
。我现在如何扩展此查询以源自该类别?看来我需要SUBQUERY
?
此外,我正在做一个NSFetchRequest
,所以除非我弄错了,否则我需要从"SELF.modelNumber IN (...)"
开始,以便我们从所有Model
s 中进行选择。
提前致谢!
【问题讨论】:
作为更新,如果我首先获取所有Model
s,我可以过滤我想要的内容:SUBQUERY(%@.brands, $brand, $brand.modelNumbers CONTAINS SELF.modelNumber).@count > 0
但是我如何将其组合成一个步骤/查询?似乎它需要反过来......
【参考方案1】:
好的,我先到了。供参考,以下作品:
SUBQUERY(%@.brands, $brand, $brand.modelNumbers CONTAINS $modelNumber).@count > 0
我认为我主要遇到的问题是忽略了.@count
组件。仍然不完全理解这一点,但似乎对所有SUBQUERY
语句都是必要的。
【讨论】:
以上是关于NSPredicate 用于两级深对多关系中的项目,无直接关系的主要内容,如果未能解决你的问题,请参考以下文章