我是核心数据的新手。我有两个实体,场地和音乐会,两场关系音乐会(从场地到音乐会)和场地(从音乐会到地点)。我想要做的基本上是检索所有音乐会的场地,其中包含两个日期(开始日期-结束日期)。
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)
发布于 2013-04-02 05:32:08
正如Rob所提到的,您的错误消息说您有零谓词。
因此,在发出请求之前,将日志和检查谓词值放在一起。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ALL concerts.startDate <= %@ AND concerts.endDate >= %@",startDate,endDate];
NSLog(@"my predicate is :%@",predicate);此外,对于我建议的良好做法,请始终这样做。
if(predicate!=nil){
//now make request here
}如果你需要更多的帮助,请告诉我。
https://stackoverflow.com/questions/15755398
复制相似问题