首页 文章

核心数据多对多关系 - 谓词问题

提问于
浏览
20

在我的核心数据模型中,我有两个实体:列表和患者 . List有一个名为'name'的属性 .

列表可以包含任意数量的患者,每个患者可以属于任意数量的不同列表 . 因此,我在名单上设置了一个名为“患者”的关系,该关系与患者具有反向关系,患者之间的关系称为“列表”,与列表具有多对多的关系 .

我正在努力弄清楚的是如何创建一个谓词,它将选择属于特定列表名称的所有患者 .

我该怎么做?我之前从未在Core Data中使用过关系 .

谢谢,

3 回答

  • 19

    给定一个数据模型:

    清单<< - >>患者,

    您可以使用谓词来查找属于具有特定名称的列表的所有患者实例,并在患者实体上使用获取请求,例如:

    [NSPredicate predicateWithFormat:@"ANY lists.name LIKE[cd] %@", listName]
    

    假设 listName 是一个带有所需列表名称的 NSString 实例 . LIKE[cd] 做了一个不区分大小写和不区分大小写的比较 .

  • 10

    这似乎工作正常:

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(ANY lists == %@)", myList];
    

    其中myList是实际的List实体 .

  • 15

    听起来你的数据模型是这样的:

    列表<< - >>患者

    我想如果你知道特定的列表名称,那么你知道特定的列表对象 . 如果是这样,您可以使用从列表到患者的多对多关系来 grab 患者 - 这是一组患者对象 . 例如,如果从列表到患者的关系被命名为“患者”:

    NSSet *patientSet = listObject.patients;
    

    注意:这要求您为托管对象创建子类,以便可以将属性和关系作为对象的属性进行访问 .

    如果由于某种原因只知道列表名称,并且您正在获取Patient对象,则可以使用Patient到List中的to-many关系创建谓词(假设它名为“lists”,列表名称为“列表名称”):

    NSPredicate *pred = [NSPredicate predicateWithFormat:@"ANY lists.name == %@",listName];
    

相关问题