我对 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”是从实体A到B的对多关系,“cs”是从B的对多关系strong> 到 C。
关于ios - NSPredicate 用于 2 对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24491740/