我在核心数据中有以下表格:
电影院(电影) 电影(标题,时间) DateTime(startTime,endTime)
基本上有几个电影院,每个电影院都可以有几部电影,每部电影也可以在不同的电影院放映,最后每部电影都可以有几个电影放映时间(DateTime)
当我想将电影插入数据库时,我知道它的标题和显示时间(startDate,endDate),我需要知道电影是否已经在数据库中,所以我所做的是:
- (BOOL)movieExistsInDB:(NSString *)title StartDate:(NSDate *)startDate EndDate:(NSDate *)endDate {
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
NSEntityDescription *entity =
[NSEntityDescription entityForName:@"Movie"
inManagedObjectContext:self.context];
[request setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"title LIKE %@ AND timetable.startDate == %@ AND timetable.endDate == %@",
title,
startDate,
endDate];
[request setPredicate:predicate];
NSError *error = nil;
NSUInteger count = [context countForFetchRequest:request error:&error];
if (!error) {
return count > 0;
}
return NO;
}
它似乎不起作用,那么问题是什么?
谢谢!
编辑: 错误信息: 因未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'此处不允许使用多对键'
答案 0 :(得分:1)
我认为您正在寻找的一个属性是一对多的关系。所以核心数据看到的是NSSet而不是NSObject。如果你想通过NSSet查询,你需要" ANY"在你的Fetchrequest中。例如:
...AND ANY timetable.startDate ...
答案 1 :(得分:0)
如果您想知道给定标题是否有Movie
实体,则不需要谓词中的日期。