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

Retrieving all the NSSet element values in a one to many relationship

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

    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 对象包含给定讲师教授的所有课程。 是否有更好的方法来单独使用 nspredicates 而不是使用 2 个 for 循环?

提前致谢。

您可以直接获取课程 objects,但指定一个需要其 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"];