具有自定义Core Data模型的sectionNameKeyPath

时间:2013-11-12 01:06:03

标签: objective-c uitableview core-data nsfetchedresultscontroller

我正在开发一个应用程序,我想在其中显示一个充满学生项目的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模型CoreData screenshot的屏幕截图。

我是Obj-C的新手,并没有自己设计数据模型,所以我有点迷失在这里,对任何帮助都会很高兴。

1 个答案:

答案 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]; ... }

相关问题