我的核心数据模型设置如下:
单个Blockbuster内部可以有多个DVD(To-Many)。每张DVD只能是单个Blockbuster(To-One)的一部分。
有多个Blockbuster,有些可能包含与其他Blockbuster的DVD实体共享相同标题的DVD实体。例如, Blockbuster A 可能有“变形金刚2”的副本, Blockbuster C 和 Blockbuster G 也是如此。让我们假装没有Blockbuster拥有同一部电影的多个副本。
我有兴趣从 Blockbuster C 中获取变形金刚2 DVD。我不想要 Blockbuster A 或 G 的副本,因为我的老板经常光顾那里,我只能在 Blockbuster中烧掉这片垃圾。 ç的
我的问题是,我如何形成一个NSFetchRequest,用标题“变形金刚2”抓取 DVD ,这是 Blockbuster <的一个孩子/ strong>“C”父实体?
此类请求将获取所有“Transformer 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,基于此进行过滤?
答案 0 :(得分:46)
您可以在NSPredicate
中遍历关系。例如,您可以编写类似
[NSPredicate predicateWithFormat:@"title == %@ AND blockbuster.name LIKE \"Blockbuster C\"", @"Transformers 2"]
现在,如果您没有要比较的属性,并且需要检查实际对象,那么您可以使用类似
的内容[NSPredicate predicateWithFormat:@"title == %@ AND blockbuster IN %@", @"Transformers 2", setOfBlockbusters]
完整语法记录为here。但setOfBlockbusters
可以是集合,数组或字典(如果它是字典,则使用值,而不是键)。