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
键来实际访问您要查找的值。