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

Posted

技术标签:

【中文标题】iOS MagicalRecord 对 tableview 的分组和排序。它们究竟是如何工作的?【英文标题】:iOS MagicalRecord grouping and sorting for tableview. How do they work, exactly? 【发布时间】:2014-01-14 06:08:41 【问题描述】:

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

目前,我正在使用:

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

在我看来(无法找到相反的明确文件)这似乎符合要求,但并非如此。

在下面的截图中,我在“K”类别下输入了一个名为“a”的活动。

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

虽然类别似乎通过以下方式正确排列为部分标题:

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section

    id <NSFetchedResultsSectionInfo> sectionInfo = [[frc sections] objectAtIndex:section];
    return [sectionInfo name];


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

我一直在网上,到处都是 SO、Github 等,似乎找不到任何解释 MR 的 fetchAll 和 findAll 方法的分组和排序行为的东西,除非是笼统的说法。有 MagicalRecord 经验的人可以帮忙,或者给我指点文档或教程吗?

谢谢!

【问题讨论】:

【参考方案1】:

MagicalRecord 中的分组助手只是 NSFetchResultsController 之上的一种便捷方法。与该类相关的任何文档都直接适用于该方法。 MagicalRecord 方法的唯一额外警告是它们将为您执行提取。此外,您可能需要重新获取(或使用 MR_performFetch)数据以获取数据中的更新,这些更新反映在内存中的数据中。

也就是说,您的分组取决于数据模型中的几件事。类别属性必须存在于您要分组的实体数据中。看起来你有这一步。如果您想响应数据的变化,您需要实现 NSFetchedResultsControllerDelegate 协议并在从 MR_fetchAll* 方法返回的 NSFRC 上设置一个委托。

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

【讨论】:

好的,@casa,谢谢。我希望能避开深杂草,但我当然不能要求 MagicalRecord 的更高权限。我一直在阅读 Apple 的文档,并将继续阅读。

以上是关于iOS MagicalRecord 对 tableview 的分组和排序。它们究竟是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章

MagicalRecord (CoreData) + Today Extension (iOS8)... 他们会玩吗?

iOS中MagicalRecord的动作方法有啥区别

等效查询 MagicalRecord -> Realm.io

MagicalRecord 在 ios8 上崩溃

MagicalRecord 在 ios 8.1 的第一次运行时崩溃

ios MagicalRecord 排序。需要部分标题列表