检查Core Data表中是否存在COMPLEX对象?

时间:2011-08-18 00:28:17

标签: objective-c core-data

我在核心数据中有以下表格:

电影院(电影) 电影(标题,时间) 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'而终止应用程序,原因:'此处不允许使用多对键'

2 个答案:

答案 0 :(得分:1)

我认为您正在寻找的一个属性是一对多的关系。所以核心数据看到的是NSSet而不是NSObject。如果你想通过NSSet查询,你需要" ANY"在你的Fetchrequest中。例如:

...AND ANY timetable.startDate ...

答案 1 :(得分:0)

如果您想知道给定标题是否有Movie实体,则不需要谓词中的日期。