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)... 他们会玩吗?
等效查询 MagicalRecord -> Realm.io