复杂核心数据谓词与多对多关系

时间:2014-02-01 15:15:22

标签: ios iphone core-data nspredicate

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

我需要获取articleGroups,这些articleGroups包含属于仓库(单一)的warehouseStocks(NSSet)的文章(NSSet)。

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

我收到了这个错误:

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

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

1 个答案:

答案 0 :(得分:7)

SUBQUERY返回匹配对象的谓词必须返回 true false ,例如“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];