ios - 如何处理自定义结果 View 的 NSFetchedResultsControllerDelegate 更新

标签 ios core-data nsfetchedresultscontroller

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

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

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

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

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

任何帮助将不胜感激!

最佳答案

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

  • controllerWillChangeContent:(调用一次)
  • Controller :didChangeObject:atIndexPath:forChangeType:newIndexPath:(调用X次)
  • controllerDidChangeContent:(调用一次)

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

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

    关于ios - 如何处理自定义结果 View 的 NSFetchedResultsControllerDelegate 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10386263/

    相关文章:

    ios - 存储应用程序内容的最佳位置

    ios - 第六代 iPod Touch 的平台字符串是什么?

    ios - NSFetchedResultsController - 只显示保存在数据库中的结果?

    objective-c - NSFetchedResultsController,后台线程中的多线程和删除

    objective-c - 即使上下文未保存,NSFetchedResultsController 委托(delegate)也会被触发

    objective-c - 仅在纵向模式下伪造横向 View

    ios - 在 iOS 8 上隐藏后退按钮

    ios - 如何将核心数据堆栈添加到 WatchKit 应用程序

    ios - 如何将不同的页面信息保存到同一个tableviewcell?

    ios - NSFetchedResultsController 类似于 iOS 消息(最近的项目优先)