Исключение NSRangeException в событии NSFetchedResultsChangeUpdate NSFetchedResultsController

У меня есть UITableView, который использует NSFetchedResultsControllerв качестве источника данных.

Основное хранилище данных обновляется в нескольких фоновых потоках, работающих параллельно (, каждый поток использует свой собственныйNSManagedObjectContext).

Основной поток наблюдает за NSManagedObjectContextDidSaveNotificationуведомление и обновляет его контекст с помощью mergeChangesFromContextDidSaveNotification:.

Иногда случается, что NSFetchedResultsControllerотправляет NSFetchedResultsChangeUpdateсобытие с несуществующим indexPath больше на тот момент.

Например :Результирующий набор извлеченного контроллера результатов содержит 1 раздел с 4 объектами. Первый объект удаляется в одном потоке. Последний объект обновляется в другом потоке. Затем иногда происходит следующее:

  • ControllerWillChangeContent :вызывается.
  • контроллер :didChangeObject :atIndexPath :forChangeType :newIndexPath :вызывается с тип = NSFetchedResultsChangeDelete, indexPath.row = 0.
  • контроллер :didChangeObject :atIndexPath :forChangeType :newIndexPath :вызывается с тип = NSFetchedResultsChangeUpdate, indexPath.row = 3.

Но полученный контроллер результатов теперь содержит только 3 объекта,а если позвонить

MyManagedObject *obj = [controller objectAtIndexPath:indexPath]

обновить ячейку табличного представления в соответствии с NSFetchedResultsChangeUpdateсобытие, происходит сбой с исключением NSRangeException.

Спасибо за любую помощь или идеи!

8
задан Tirth 16 July 2013 в 08:15
поделиться