具有一对多关系的复杂核心数据谓词

Posted

技术标签:

【中文标题】具有一对多关系的复杂核心数据谓词【英文标题】:Complex Core Data predicate with to-many relations 【发布时间】:2014-02-01 15:15:21 【问题描述】:

我有 4 个实体。 ArticleGroup, Article, WarehouseStok, Warehouse。

我需要获取 articleGroups 的文章(NSSet)属于仓库Stocks(NSSet)属于仓库(单个)。

    request.predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(articles, $a, SUBQUERY($a.warehouseStocks, $y, $y.warehouse == %@))", warehouse];

我收到了这个错误:

* 由于未捕获的异常 'NSInvalidArgumentException' 导致应用程序终止,原因:'无法解析格式字符串 "SUBQUERY(articles, $a, SUBQUERY($a.warehouseStocks, $y, $y .warehouse == %@))"'

如何构造这样的谓词?有可能吗?

【问题讨论】:

【参考方案1】:

一个子查询返回一个匹配对象的集合谓词必须返回truefalse,例如“SUBQUERY(...).@count > 0”。

你的情况是:

[NSPredicate predicateWithFormat:@"SUBQUERY(articles, $a, SUBQUERY($a.warehouseStocks, $y, $y.warehouse == %@).@count > 0).@count > 0", warehouse];

但我认为您可以将谓词简化为(未经测试):

[NSPredicate predicateWithFormat:@"SUBQUERY(articles, $a, ANY $a.warehouseStocks.warehouse == %@).@count > 0", warehouse];

【讨论】:

以上是关于具有一对多关系的复杂核心数据谓词的主要内容,如果未能解决你的问题,请参考以下文章

与包含的一对多关系的核心数据谓词

谓词匹配一对多关系核心数据

核心数据 - 以一对多关系访问实例与获取请求?

可可 iphone 核心数据谓词一对多 fetchrequest

不搜索一对多核心数据关系

核心数据:在一对多关系中匹配多个项目的组合