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

时间:2015-01-23 16:40:36

标签: ios core-data nspredicate

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

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

提前致谢。

1 个答案:

答案 0 :(得分:2)

您可以直接获取课程对象,但指定要求其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"];