iOS MagicalRecord分组和排序tableview。它们是如何工作的?

时间:2014-01-14 06:08:42

标签: ios uitableview magicalrecord

我有一个很小的测试应用程序,通过MagicalRecord使用Core Data,目的是学习如何按类别分组活动。我想在分组的tableview中显示数据,其中所有活动的名称共享一个在类别下组合在一起的公共类别。因此,我有一个名为ListActivity的实体,它有两个属性,“name”和“category”,两个字符串。

目前,我正在使用:

frc = [ListActivity MR_fetchAllGroupedBy:@"category" withPredicate:nil sortedBy:@"name" ascending:YES];

在我看来(无法找到相反的明确文件)这似乎符合法案,但不是这样。

在以下屏幕截图中,我在“K”类别下输入了名为“a”的活动。

enter image description here

到目前为止很好。 接下来,我在“A。”类别下输入名为“k”的活动。

enter image description here

虽然类别似乎通过以下方式正确地作为章节标题安排:

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    id <NSFetchedResultsSectionInfo> sectionInfo = [[frc sections] objectAtIndex:section];
    return [sectionInfo name];

}

活动本身在它们被分配的组(类别)之外浮动,但仍保持按字母顺序排列。

我一直在网络上,遍布SO,Github等,似乎无法找到解释MR的fetchAll和findAll方法的分组和排序行为的任何内容,除了一般术语。有MagicalRecord经验的人可以帮忙,或者指点文档或教程吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

MagicalRecord中的分组帮助程序仅仅是NSFetchResultsController之上的一种便捷方法。与该类相关的任何文档都直接适用于此方法。 MagicalRecord方法唯一需要注意的是它们会为你执行获取。此外,您可能需要重新获取(或使用MR_performFetch)数据,以便在您在内存中的数据中反映数据的更新。

也就是说,您的分组取决于数据模型中的一些内容。 category属性必须出现在您要分组的实体数据中。看起来你已经迈出了这一步。如果要响应数据中的更改,则需要实现NSFetchedResultsControllerDelegate协议并在从MR_fetchAll *方法返回的NSFRC上设置委托。

我建议查看NSFetchedResultsController示例,因为这些示例直接适用于MagicalRecord获取助手的所有用法。