检索一对多关系中的所有 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"];
我有一个一对多的关系,如附图所示。我想列出特定讲师教授的所有课程名称,到目前为止我提出的解决方案如下。
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"];