相关疑难解决方法(0)

NSFetchedResultsController的NSFetchedResultsChangeUpdate事件中的NSRangeException异常

我有一个UITableView使用NSFetchedResultsControlleras作为数据源.

核心数据存储在并行运行的多个后台线程中更新(每个线程使用它自己的NSManagedObjectContext).

主线程观察NSManagedObjectContextDidSaveNotification 通知并更新其上下文mergeChangesFromContextDidSaveNotification:.

有时发生NSFetchedResultsControllerNSFetchedResultsChangeUpdate事件是发送一个当前不再存在的indexPath 的 事件.

例如:获取的结果控制器的结果集包含1个包含4个对象的部分.第一个对象在一个线程中删除.最后一个对象在另一个线程中更新.然后有时会发生以下情况:

  • controllerWillChangeContent:被调用.
  • controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:使用type = NSFetchedResultsChangeDelete,indexPath.row = 0调用.
  • controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:使用type = NSFetchedResultsChangeUpdate,indexPath.row = 3调用.

但是获取的结果控制器现在只包含3个对象,如果调用

MyManagedObject *obj = [controller objectAtIndexPath:indexPath]
Run Code Online (Sandbox Code Playgroud)

要根据NSFetchedResultsChangeUpdate 事件更新表视图单元格,这会因NSRangeException异常而崩溃.

感谢您的任何帮助或想法!

core-data nsfetchedresultscontroller

8
推荐指数
2
解决办法
2023
查看次数