我目前正在开发基于CoreData的iPhone应用程序,其地图视图将从 NSFetchedResultsController 生成其注释。地图视图的想法是它将为用户显示许多已保存的位置。
使用NSFetchedResultsController的一个优点是我可以将我的地图视图设置为NSFetchedResultsController上的委托,并获知当用户是在另一台设备或网站上发生的对已保存位置集所做的任何更改登录。
我目前在解决如何处理发送到 NSFetchedResultsControllerDelegate 实现的各种不同更新方面遇到了一些麻烦。文档:http://developer.apple.com/library/ios/#documentation/CoreData/Reference/NSFetchedResultsControllerDelegate_Protocol/Reference/Reference.html似乎没有告诉您如何处理这些不同的更新,因为它似乎更适合与UITableView集成,UITableView完成大部分工作。
我保留了我的注释的NSDictionary,它将它们映射到结果集中的NSIndexPath。问题是,例如,当我收到10个移动,3个插入和4个删除更新时,我应该以什么顺序处理这些?其中一些indexPath会有许多冲突的索引,它们的处理顺序会对我需要移动,插入或删除的实际注释产生影响。如果我首先执行所有移动更新,那么插入索引将导致最终顺序与其最终顺序不同(如果我先插入)。
是否有任何现有的小型库/类会在更新之前将一组索引转换为一组更新后索引,并给出这些更新消息?如果没有,任何人都可以解释这些东西是如何工作的,所以我可以写自己的吗?
任何帮助将不胜感激!
答案 0 :(得分:0)
一个更新周期的NSFetchedResultsControllerDelegate方法的流程如下:
对didChangeObject方法的每次调用都只是一个对象/ indexPath。您应该通过对didChangeObject的调用按照您收到的顺序应用更改。这将使他们保持一致。
如果您正在使用部分,您也可以调用控制器:didChangeSection:atIndex:forChangeType:与对象更改的调用混合。