ios - NSPredicate 用于 2 对多关系

标签 ios core-data nspredicate

我对 NSPredicate 的语法有疑问。我有 3 个实体:A、B 和 C。A 与 B 具有多对多关系。B 与 C 具有多对多关系。我想获取 A 中至少具有一种关系的所有托管对象B 中的一个对象反过来又与 C 中的至少一个对象有关系。

我已经尝试了 SUBQUERY 和 ANY 的一些变体,但显然我没有使用正确的语法。

我试过:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *ent = [NSEntityDescription entityForName:@"A" inManagedObjectContext:self.managedObjectContext];
fetchRequest.entity = ent;
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"(SUBQUERY(B, $b, $b.c.@count > 0).@count > 0)"];

结果是:

2014-06-30 09:07:12.143 我的应用程序 [86086:60b] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“包含 KVC 聚合的 key 路径不应该存在;无法处理 $b.jobs.@count'

然后:

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"ANY b.c.@count > 0"];

结果:

2014-06-30 09:10:14.403 我的应用程序 [86186:60b] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“不支持的函数表达式计数:(b.c)”

还有:

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"(SUBQUERY(B, $b, $b.c.@count > 0))"];

结果:

2014-06-30 09:17:25.883 我的应用程序 [86218:60b] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“无法解析格式字符串”(SUBQUERY(B, $ b, $b.c.@count > 0))"'

最后:

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"(SUBQUERY(B, $b, $b.c).@count > 0)"];

结束于:

2014-06-30 09:18:30.202 我的应用程序 [86272:60b] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“无法解析格式字符串”(SUBQUERY(B, $ b, $b.c).@count > 0)"'

有人知道吗?必须有一种简单的方法来执行此获取...

最佳答案

这应该有效:

[NSPredicate predicateWithFormat:@"SUBQUERY(bs, $b, ANY $b.cs != NULL).@count > 0"]

其中“bs”是从实体AB的对多关系,“cs”是从BC

关于ios - NSPredicate 用于 2 对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24491740/

相关文章:

ios - swift 4 : NSPredicate from UITextField and array of custom object

ios - 动态方法解析

ios - 更改应用程序的名称

ios - 核心数据和数组 swift 2.0

macos - 在 Mac OS X 应用程序上定位 Core Data 的 sqlite 数据库

objective-c - 核心数据 : Sorting results from an abstract entity based on entity type

复合语句时 Swift NSPredicate 抛出 EXC_BAD_ACCESS(Code=1, address=0x1)

iphone - NSPredicate 表达式中 SUBQUERY 的快速解释

ios - 实体如何继承递归模型结构中的属性?

ios - 在 NSPredicate 中使用 ALL/ANY/NONE