我有一对多关系,如附图所示。我想列出一个特定讲师所教授的所有课程标题,我到目前为止所提出的解决方案如下:
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循环?
提前致谢。
答案 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"];