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

Ios 检索一对多关系中的所有NSSet元素值,ios,core-data,nspredicate,Ios,Core Data,Nspredicate,我有一个一对多的关系,如附图所示。我想列出某位讲师教授的所有课程名称,目前为止我提出的解决方案如下 NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Lecturer"]; NSMutableSet *courseList = [[NSMutableSet alloc] init]; NSPredicate *predicate = [NSPredicate predicateW

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

    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循环来实现这一点


提前感谢。

您可以直接获取课程对象,但指定不同的谓词,要求它们的
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"];

有没有办法只检索课程而不是课程对象列表?我不能使用propertiesToFetch来检索吗?你可以,但它不会像你希望的那样工作。如果您单独使用
propertiesToFetch
,则仍然会返回NSManagedObject数组,但只有在您专门访问它们时,才会获取它们的“其他”属性(即,不是您指定的属性)。如果您还指定了
NSDictionaryResultType
resultType
,那么您将返回一个字典数组-您仍然需要使用
title
键来实际访问您要查找的值。