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

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

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

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

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

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

controllerWillChangeContent: is called. controller:didChangeObject:atIndexPath:forChangeType:newIndexPath: is called with type = NSFetchedResultsChangeDelete, indexPath.row = 0. controller:didChangeObject:atIndexPath:forChangeType:newIndexPath: is called with type = NSFetchedResultsChangeUpdate, indexPath.row = 3.

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

MyManagedObject *obj = [controller objectAtIndexPath:indexPath]

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

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

Ответы на вопрос(2)

Ваш ответ на вопрос