gpt4 book ai didi

objective-c - 如何创建一个 NSFetchRequest 来根据属性和关系过滤核心数据对象?

转载 作者:太空狗 更新时间:2023-10-30 03:10:08 24 4
gpt4 key购买 nike

我有一个像这样的核心数据模型设置:

  • 一鸣惊人实体
    • DVD 实体的对多关系。
  • DVD 实体
    • title 属性(字符串)
    • 与父 Blockbuster 实体的一对一关系

单个 Blockbuster 中可以包含多张 DVD(对多)。每张 DVD 只能是单个 Blockbuster(一对一)的一部分。

Blockbuster 有多个,有些可能包含 DVD 实体,这些实体与其他 Blockbuster 的 DVD 实体共享相同的标题。例如,Blockbuster A 可能有“变形金刚 2”的副本,Blockbuster CBlockbuster G 也有。假设没有 Blockbuster 拥有超过一部同名电影。

我有兴趣从 Blockbuster C 购买变形金刚 2 DVD。 Blockbuster AG 的副本我不要了,因为我的老板经常去那里,我只能在 Blockbuster 中烧掉这 block 垃圾才能逃脱C.


我的问题是,我如何构建一个 NSFetchRequest,它获取 标题“变形金刚 2”的 DVD,它是 Blockbuster< 的子项/strong>“C”父实体?

这种类型的请求将获取所有“变形金刚 2”DVD,但不是特定于 Blockbuster C 实体的那张:

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,并以此为基础进行过滤?

最佳答案

您可以在 NSPredicate 中遍历关系。例如,你可以这样写

[NSPredicate predicateWithFormat:@"title == %@ AND blockbuster.name LIKE \"Blockbuster C\"", @"Transformers 2"]

现在,如果您没有要比较的属性并且需要检查实际对象,那么您可以使用类似的东西

[NSPredicate predicateWithFormat:@"title == %@ AND blockbuster IN %@", @"Transformers 2", setOfBlockbusters]

完整的语法记录在案here .但是 setOfBlockbusters 可以是集合、数组或字典(如果是字典,则使用值而不是键)。

关于objective-c - 如何创建一个 NSFetchRequest 来根据属性和关系过滤核心数据对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1527966/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com