我有一个NSPredicate语法问题。我有三个实体:A,B和C。 A与B有多对多的关系。B与C也有多对多的关系。我想获取所有在A中的托管对象,这些托管对象至少与B中的一个对象有关系,而B又至少与C中的一个对象有关系。
我尝试了几种SUBQUERY和ANY的变体,但显然我没有使用正确的语法。
我尝试过:
我尝试了几种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 My App[86086:60b] * 因未捕获的异常 'NSInvalidArgumentException' 终止应用程序,原因是:'Keypath containing KVC aggregate where there shouldn't be one; failed to handle $b.jobs.@count'
接着:
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"ANY b.c.@count > 0"];
导致如下结果:
2014-06-30 09:10:14.403 My App[86186:60b] * 应用程序因未捕获的异常 'NSInvalidArgumentException' 而终止,原因是:不支持函数表达式 count:(b.c)
此外:
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"(SUBQUERY(B, $b, $b.c.@count > 0))"];
导致:
2014-06-30 09:17:25.883 My App[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 My App[86272:60b] * 应用程序由于未捕获的异常“NSInvalidArgumentException”而终止,原因是:“无法解析格式字符串“(SUBQUERY(B,$b,$b.c).@count > 0)”'
有人有任何想法吗? 必须有一种简单的方法来执行此获取...