我正在开发一个应用程序,我想在其中显示一个充满学生项目的UITableView。每个项目实体都有几个属性,如标题,描述等,还与其他实体(如学生,学习课程等)的关系相关联。 我现在要做的是,将学习课程作为部分,其中包括由该学习课程的学生制作的各个项目。
到目前为止,我的代码看起来像这样
- (NSFetchedResultsController *)fetchedResultsController
{
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Project" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setFetchBatchSize:20];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES];
NSArray *sortDescriptors = @[sortDescriptor];
[fetchRequest setSortDescriptors:sortDescriptors];
NSFetchedResultsController *aFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:self.managedObjectContext
sectionNameKeyPath:Nil
cacheName:Nil];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
return _fetchedResultsController;
}
这是CoreData模型的屏幕截图。
我是Obj-C的新手,并没有自己设计数据模型,所以我有点迷失在这里,对任何帮助都会很高兴。
答案 0 :(得分:0)
您还没有问过具体问题,但我可以给您一些基本方向。您创建NSFetchedResultsController
的方式看起来是正确的,除了您需要再做两件事:按课程标题对结果进行排序,并将sectionNameKeyPath
设置为课程标题(我假设您的{{1}实体具有Studycourse
属性,但根据需要替换另一个属性。
title
请注意,通过提供两个排序描述符,项目将首先按课程组织,然后在每个科目中按项目标题组织。值得注意的另一件事是关键路径使用点符号来跟随实体关系。因此,从项目实体到达课程标题的方式是- (NSFetchedResultsController *)fetchedResultsController
{
...
NSSortDescriptor *courseTitleSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"projecttostudycourse.title" ascending:YES];
NSSortDescriptor *titleSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES];
NSArray *sortDescriptors = @[courseTitleSortDescriptor, titleSortDescriptor];
[fetchRequest setSortDescriptors:sortDescriptors];
NSFetchedResultsController *aFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:self.managedObjectContext
sectionNameKeyPath:@"projecttostudycourse.title"
cacheName:Nil];
...
}
。