使用 AND 对多 NSPredicate 的核心数据

Posted

技术标签:

【中文标题】使用 AND 对多 NSPredicate 的核心数据【英文标题】:Core data to-many NSPredicate with AND 【发布时间】:2010-02-26 19:15:52 【问题描述】:

我正在尝试为“键入时查找”搜索栏编写查询。我想要做的是查询“Kind”,并返回任何具有 LocalName 的种类('name' LIKE %@ AND localeIdentifier == %@)。

如果我只搜索名称(因此忽略 localeIdentifier),我可以这样做:

ANY localized.name LIKE %@

我想要的是更像的东西

ANY localized.(name LIKE %@ AND localeIdentifier == %@)

综上所述,搜索“Kind”,“localized”对多关系中的任何一项都应匹配 name 和 localeIdentifier。

对这个的正确语法有什么想法吗?

【问题讨论】:

【参考方案1】:

你想要的是subquery。在谓词格式语法中:

SUBQUERY(self.localized, $x, $x.name LIKE %@ AND $x.localeIdentifier == %@).@count > 0

其中SUBQUERY 表达式返回self.localized 集合中与第三个参数中的谓词匹配的实例集合。 Kind 此 SUBQUERY 表达式为非空的实例(即 @count > 0)符合您所需的条件。

在 OS X 10.5 中引入了 SUBQUERY 表达式。

【讨论】:

很好的提示!正是我需要的!

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

核心数据:使用 SQLITE 存储类型时,包含对多关系的 NSPredicate 不会产生任何结果

CoreData:查询一对多对多的关系

CoreData:使用 NSPredicate 过滤一对多对多关系(此处不允许错误对多键)

用于多对多关系的 NSPredicate

使用 NSPredicate 获取一对多关系值

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