NSPredicate以获取具有两个一对多关系的实体

时间:2014-05-08 11:48:11

标签: ios objective-c core-data nspredicate

我有三个独立的实体,(r是关系):

1) CURRENCY

名称

_

国家/地区(r 1到很多)

2) COUNTRY

名称

_

货币(r)

交换(r 1到很多)

3) EXCHANGE

名称

_

国家(r)

从CURRENCY到COUNTRY的关系是一对多。

从COUNTRY到EXCHANGE的关系是一对一的。

我需要加载我的NSFetchedResultsController所有CURRENCY(没有重复),其中COUNTRY至少有一个EXCHANGE。

示例:

货币:欧元,美元,英镑,泰伯利亚(不存在!)

国家:法国,​​德国,意大利,美国,英国

交易所:泛欧交易所(法国,欧元),Xetra(德国,欧元),米兰证券交易所(意大利,欧元),伦敦证券交易所(英国,英镑)

预期结果是:英镑, 欧元, 美元

我尝试了类似的东西,但它不起作用:

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Currency"];
request.predicate = [NSPredicate predicateWithFormat: @"countries.exchanges.@count > 0"];

由于未捕获的异常导致代码崩溃:'NSInvalidArgumentException',原因:'不支持的函数表达式计数:(countries.exchanges)'

我应该使用的NSPredicate是什么?

1 个答案:

答案 0 :(得分:1)

问题是嵌套的to-many关系,这需要使用SUBQUERY:

[NSPredicate predicateWithFormat:@"SUBQUERY(countries, $c, ANY $c.exchanges != NULL).@count > 0"]