我是核心数据的菜鸟。我有两个实体场地和音乐会以及两个关系音乐会(从场地到音乐会)和场地(从音乐会到场地)。我想要做的基本上是检索包含在两个日期(startDate-endDate)之间的场地的所有音乐会。
NSPredicate *concertsToShow = [NSPredicate predicateWithFormat:@"ALL concerts.startDate <= %@ AND concerts.endDate >= %@",startDate,endDate];
NSManagedObjectContext *managedObjectContext = ((AppDelegate *)[[UIApplication sharedApplication]delegate]).managedObjectContext;
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Venue" inManagedObjectContext:managedObjectContext]];
[request setRelationshipKeyPathsForPrefetching:[NSArray arrayWithObjects:@"concerts", nil]];
[request setPredicate:concertsToShow];
NSError *error = nil;
NSArray *concerts = [managedObjectContext executeFetchRequest:request error:&error];
return concerts;
运行代码时出现以下异常:
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“不支持的谓词(null)” *
我试图在谓词上加上括号,但它说它无法解析谓词。
我最终使用了一个子查询
NSPredicate *concertsToShow = [NSPredicate predicateWithFormat:@"SUBQUERY(concerts, $i, $i.startDate BETWEEN {%@,%@}).@count>0",startDate,endDate];
问题是它只对场地执行过滤:它只检索具有音乐会的场地,该音乐会的日期包含在 startDate 和 endDate 之间,但相关的音乐会没有被过滤。我想要实现的是让这个过滤加上对音乐会的过滤。例如,我有两个与音乐会相关的场地(仅在示例中显示日期):“爱尔兰酒吧”->>(01-04-2013, 02-04-2013,03-04-2013,04-04-2013 ) "英语酒吧" ->> (05-04-2013)
如果我的谓词的 startDate 和 endDate 分别是 02-04-2013 和 04-04-2013 结果应该是:
“爱尔兰酒吧”->> (02-04-2013,03-04-2013,04-04-2013)