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

标签 ios objective-c core-data nspredicate

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

1) 货币

名字

_

国家(r 1 到许多)

2) 国家

名字

_

货币(r)

交流(r 1 到很多)

3) 交换

名字

_

国家(右)

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

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

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

示例:

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

国家:法国、德国、意大利、美国、英国

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

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

我试过类似的方法,但没有用:

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

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

我应该使用什么是正确的NSPredicate

最佳答案

问题是嵌套的一对多关系,这需要使用 SUBQUERY:

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

关于ios - NSPredicate 获取具有两个一对多关系的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23540867/

相关文章:

ios - uiTableViewCell 添加行和图像,第二次点击删除行

ios - 在应用程序升级期间避免 iCloud 同步上的重复数据

iphone - 核心数据关系

ios - 将 iOS 核心数据添加到现有项目 - 展开可选值时出错

ios - 使用没有代码设计的 xcodebuild 构建 iOS 应用程序

iphone - UITextView - 如何定义一个单词是一行中的最后一个单词

ios - UITabBarController 委托(delegate)与 Storyboard

objective-c - 如何在 tabbarcontroller 中制作 View 的 uiscrollview?

ios - 在 ViewController 中设置变量之前执行 ViewModel 函数

ios - 自定义 'Copy' 文本弹出窗口(UIWebView)?