NSFetchedResultsController包含来自其他模型的数据

时间:2014-01-20 10:05:03

标签: ios uitableview nsfetchedresultscontroller

我正在尝试使用来自NSFetchedResultsController的数据使用UITableView构建应用程序。问题是 - 我需要在表格视图中显示其他模型的一些额外数据。

假设我有2个模型:学生和小组(我认为关系很明显:小组由许多学生组成,学生只能在一个小组中)。我正在尝试使用组列表构建UITableView。我也希望每个小组都有多名学生。

(NSFetchedResultsController *) fetchController {
   if (!_fetchController) {
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"GroupModel" inManagedObjectContext:[NSManagedObjectContext MR_defaultContext]];
    [fetchRequest setEntity:entity];

    NSPredicate *messageInChatPredicate = [GroupModel getMyChatsPredicate];
    [fetchRequest setPredicate:messageInChatPredicate];

    NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];

    _fetchController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:[NSManagedObjectContext MR_defaultContext] sectionNameKeyPath:nil cacheName:@"main"];
    _fetchController.delegate = self;
  }

  return _fetchController;
}

我想知道如何添加其他信息(例如每组中的学生人数)?

3 个答案:

答案 0 :(得分:1)

创建另一个负责其他模型(即学生)的NSFetchedResultsController。

答案 1 :(得分:1)

为什么不使用group.students.countgroup实体获取值?你只需要一个fetchedResultsController,我想你会发现Core Data性能很好。

您的术语有点令人困惑,通常模型是在Xcode中创建的核心数据模型,并且具有许多实体,例如小组,学生。有时您可以使用两种不同的模型和/或不同版本的模型。

您的对象通常称为实体,两者都属于同一个Core Data模型。

编辑: 要获得子组的计数,例如女孩或男孩,您可以执行以下操作

NSMutableArray *boys = [[NSMutableArray alloc] init];
[NSPredicate predicateWithFormat:@"gender = %@",@"MALE"];
[boys addObjectsFromArray:[group.students filteredArrayUsingPredicate:predicate]];
NSLog(@" boys count is %d", boys.count);

当然假设genderStudent的属性。

答案 2 :(得分:-1)

您基本上有两种方法可以获取其他信息,例如每组中的学生人数。

第一种选择是计算学生群体与学生的关系。要提供此请求,NSManagedObjectContext将加载内存中的所有学生以获得合适的结果。就个人而言,我真的不喜欢这个选项。

第二个选项是将属于某个组的学生人数存储在该组的属性中,以便可以直接添加。是的,您必须手动维护正确的数字。根据必须加载的数据量,这种方法更为可取。至关重要,因为它的方式很好