代码之家  ›  专栏  ›  技术社区  ›  crowso

检索一对多关系中的所有NSSet元素值

  •  0
  • crowso  · 技术社区  · 10 年前

    我有一对多的关系,如附图所示。我想列出某位讲师教授的所有课程名称,到目前为止,我提出的解决方案如下。

    enter image description here

        NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Lecturer"];
        NSMutableSet *courseList = [[NSMutableSet alloc] init];
    
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == 'smith'"];
        [request setPredicate:predicate];
    
        NSError *error = nil;
        NSArray *lecturers = [self.managedObjectContext executeFetchRequest:request
                                                                          error:&error];       
        for (Lecturer *lecturer in lecturers)
        {
            NSSet *set = lecturer.courses;
    
            for (Course *course in set)
            {
                [courseList addObject:course.title];
            }
        }
    

    courseList对象包含给定讲师教授的所有课程。 有没有更好的方法可以单独使用nspredices,而不是使用2 for循环?

    提前感谢。

    1 回复  |  直到 10 年前
        1
  •  2
  •   pbasdf    10 年前

    您可以直接获取Course对象,但指定不同的谓词需要 authorname.name 要匹配:

    NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Course"];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"authorname.name == 'smith'"];
    [request setPredicate:predicate];
    NSError *error = nil;
    NSArray *courseList = [self.managedObjectContext executeFetchRequest:request error:&error];       
    

    如果您想要一个只有标题的数组,那么可以使用:

    NSArray *courseTitles = [courseList valueForKeyPath:@"title"];