2

我目前正在开发一个基于 CoreData 的 iPhone 应用程序,它的地图视图将从 NSFetchedResultsController 生成其注释。地图视图的想法是它将为用户显示许多已保存的位置。

使用 NSFetchedResultsController 的一个优点是,我可以将我的地图视图设置为 NSFetchedResultsController 上的委托,并在用户登录时收到对另一台设备或网站上发生的保存位置集所做的任何更改的通知。

我目前在如何处理发送到我的NSFetchedResultsControllerDelegate实现的许多不同类型的更新方面遇到了一些麻烦。文档: http: //developer.apple.com/library/ios/#documentation/CoreData/Reference/NSFetchedResultsControllerDelegate_Protocol/Reference/Reference.html似乎并没有告诉您应该如何处理这些不同的更新,因为它似乎更适合与完成大部分工作的 UITableView 集成。

我保留我的注释的 NSDictionary,将它们映射到结果集中的 NSIndexPath。问题是,例如,当我收到 10 次移动、3 次插入和 4 次删除更新时,我应该按什么顺序处理这些更新?其中一些 indexPaths 将具有许多冲突的索引,并且它们的处理顺序将影响我需要移动、插入或删除的实际注释。如果我先执行所有移动更新,那么插入索引将导致最终顺序与我先插入时的最终顺序不同。

给定这些更新消息,是否有任何现有的小型库/类可以将更新之前的一组索引转换为一组更新后的索引?如果没有,谁能解释这些东西是如何工作的,这样我就可以自己写了?

任何帮助将不胜感激!

4

1 回答 1

0

一个更新周期的 NSFetchedResultsControllerDelegate 方法流程如下:

  • controllerWillChangeContent:(调用一次)
  • 控制器:didChangeObject:atIndexPath:forChangeType:newIndexPath:(调用X次)
  • controllerDidChangeContent:(调用一次)

对 didChangeObject 方法的每次调用都只涉及一个对象/indexPath。您应该按照通过对 didChangeObject 的调用收到的顺序应用更改。这将使它们保持一致。

如果您正在使用部分,您还可以调用 controller:didChangeSection:atIndex:forChangeType: 与对象更改调用混合。

于 2012-05-23T19:30:11.983 回答