我有一个这样的核心数据模型设置:
- 大片实体
- 与DVD实体的多对多关系。
- DVD实体
- 标题属性(字符串)
- 与父Blockbuster实体的一对一关系
一个 Blockbuster 里面可以有多个 DVD(To-Many)。每张 DVD 只能是单个 Blockbuster (To-One) 的一部分。
有多个 Blockbuster,有些可能包含与其他 Blockbuster 的 DVD 实体具有相同标题的 DVD 实体。例如,Blockbuster A可能有《变形金刚 2》的副本,Blockbuster C和Blockbuster G也有。让我们假设没有一个百视达拥有超过一份同名电影的副本。
我有兴趣从Blockbuster C获取变形金刚 2 DVD 。我不想要Blockbuster A或G的副本,因为我的老板经常在那里,我只能在Blockbuster C烧掉这块垃圾。
我的问题是,如何形成一个 NSFetchRequest 来获取标题为“Transformers 2”的DVD ,它是Blockbuster “C”父实体的子实体?
这种类型的请求将获取所有“变形金刚 2”DVD,但不会获取 Blockbuster C 实体特有的 DVD:
NSManagedObjectContext *moc = [self managedObjectContext];
NSString *aTitle = @"Transformers 2";
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title == %@", aTitle];
[request setEntity:[NSEntityDescription entityForName:@"DVD" inManagedObjectContext:moc]];
[request setPredicate:predicate];
NSError *error = nil;
NSArray *results = [moc executeFetchRequest:request error:&error];
// error handling code
[request release];
有没有办法在 NSPredicate 中传递相关对象的对象 ID,并基于此进行过滤?