我有一个通过 MagicalRecord 使用 Core Data 的小型测试应用程序,目的是学习如何按类别对事件进行分组。我想在一个分组的 TableView 中显示数据,其中共享一个公共(public)类别的所有事件的名称都在类别下分组在一起。因此,我有一个名为 ListActivity 的实体,它有两个属性,“name”和“category”,都是字符串。
目前,我正在使用:
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 经验的人可以帮忙,或者给我指点文档或教程吗?
谢谢!
最佳答案
MagicalRecord 中的分组助手只是 NSFetchResultsController 之上的一种便捷方法。与该类相关的任何文档都直接适用于此方法。 MagicalRecord 方法的唯一额外注意事项是它们将为您执行提取。此外,您可能需要重新获取(或使用 MR_performFetch)数据以获取反射(reflect)在内存中的数据中的数据更新。
也就是说,您的分组取决于数据模型中的几项内容。类别属性必须存在于您要分组的实体数据中。看起来你有这一步。如果您想响应数据的变化,您需要实现 NSFetchedResultsControllerDelegate 协议(protocol)并在从 MR_fetchAll* 方法返回的 NSFRC 上设置一个委托(delegate)。
我建议查看 NSFetchedResultsController 示例,因为这些示例直接适用于 MagicalRecord 获取助手的所有用途。
关于iOS MagicalRecord 表格 View 的分组和排序。它们究竟是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21107081/