【发布时间】:2011-09-04 21:37:01
【问题描述】:
所以我在 UITableView 中显示一些实体。通过单击单元格,我想显示已经在“对多”关系中查询的其他实体。
例如,我正在显示一所学校的所有班级。现在我想显示一个班级的所有学生。这个学生已经可以作为NSSetClass.students下的Class.students使用
现在我想在不同的部分显示学生的第一个字母。
如果我想直接从 CoreData 获取它们,我会做类似的事情
// init fetch request
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:self.managedObjectContext];
// Search only specific students
[fetchRequest setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"class == %@", theClassThoseStudentsBelongTo];
[fetchRequest setPredicate:predicate];
// Generate it
NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:self.managedObjectContext
sectionNameKeyPath:@"firstLetter"
cacheName:@"StudentTable"];
使用这种方法,我可以将它们很好地排列成部分。
但我已经拥有特定班级的所有学生。有没有办法用初始化的NSSet 初始化NSFetchedResultsController 或做一些相同的事情?
当然,我可以手动安排我的 NSSet,但没有像新查询那样的好方法吗?
提前致谢。 如果有不清楚的地方,请发表评论。
【问题讨论】:
-
对答案感到好奇,因为我很久以前就遇到过同样的问题,并采取了手动实现所有事情的艰难道路(不难但不方便且不优雅)。
-
您是希望在单个 tableview 中完成所有这些工作,还是使用 Class-->>class.students 设置分层 tableview?
-
我有一个带有“classes”的tableview,然后在点击一个类后,一个带有“students”的tableview。
-
在第一个tableView中使用“学生”吗? (有类的那个?)因为如果我没记错的话,NSFetchedResultsController 获取的对象一开始是错误的,所以学生关系只有在需要时才会延迟加载。
-
我以某种方式使用它们。我只想知道是否至少存在一名学生。所以我做
if (aClass.students) {}所以我认为它会查询所有延迟加载的学生,对吗?
标签: iphone objective-c ios core-data uitableview