如何处理自定义结果视图的 NSFetchedResultsControllerDelegate 更新
Posted
技术标签:
【中文标题】如何处理自定义结果视图的 NSFetchedResultsControllerDelegate 更新【英文标题】:How do I Handle NSFetchedResultsControllerDelegate updates for custom results view 【发布时间】:2012-04-30 15:28:56 【问题描述】:我目前正在开发一个基于 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 将具有许多冲突的索引,并且它们的处理顺序将影响我需要移动、插入或删除的实际注释。如果我先执行所有移动更新,那么插入索引将导致最终顺序与我先插入时的最终顺序不同。
在给定这些更新消息的情况下,是否有任何现有的小型库/类可以将更新前的一组索引转换为一组更新后的索引?如果没有,谁能解释一下这些东西是如何工作的,这样我就可以自己写了?
任何帮助将不胜感激!
【问题讨论】:
【参考方案1】:一个更新周期的 NSFetchedResultsControllerDelegate 方法流程如下:
controllerWillChangeContent:(调用一次) controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:(调用 X 次) controllerDidChangeContent:(调用一次)对 didChangeObject 方法的每次调用都只涉及一个对象/indexPath。您应该按照通过对 didChangeObject 的调用收到的顺序应用更改。这将使它们保持一致。
如果您正在使用部分,您还可以调用 controller:didChangeSection:atIndex:forChangeType: 与对象更改的调用混合。
【讨论】:
以上是关于如何处理自定义结果视图的 NSFetchedResultsControllerDelegate 更新的主要内容,如果未能解决你的问题,请参考以下文章
如何处理自定义 UIViewController 委托 (ARC)?