我遇到了NSPredicate语法的问题.我有3个实体:A,B和C.A与B有多对多的关系.B与C有多对多的关系.我想获取A中至少有一个关系的所有托管对象与B中的对象相反,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聚合的Keepath不应该有一个;无法处理$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.c.@count > 0))"];
导致:
2014-06-30 09:17:25.883我的应用程序[86218:60b] *由于未捕获的异常’NSInvalidArgumentException’终止应用程序,原因:’无法解析格式字符串'(SUBQUERY(B,$bc @count) > 0))“’
最后:
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"(SUBQUERY(B,$b.c).@count > 0)"];
结束于:
2014-06-30 09:18:30.202我的应用程序[86272:60b] *由于未捕获的异常’NSInvalidArgumentException’终止应用程序,$bc). @count> 0)“’
任何人有任何想法?必须有一个简单的方法来做这个获取…
解决方法
这应该工作:
[NSPredicate predicateWithFormat:@"SUBQUERY(bs,ANY $b.cs != NULL).@count > 0"]
其中“bs”是从实体A到B的to-many关系,“cs”是从B到C的to-many关系.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。