Exceção NSRangeException no evento NSFetchedResultsChangeUpdate do NSFetchedResultsController

eu tenho umUITableView que usa umNSFetchedResultsController como fonte de dados.

O armazenamento de dados do núcleo é atualizado em vários encadeamentos em segundo plano em execução em paralelo (cada encadeamento usando seu próprioNSManagedObjectContext).

O thread principal observa oNSManagedObjectContextDidSaveNotification notificação e atualiza seu contexto commergeChangesFromContextDidSaveNotification:.

Às vezes acontece que oNSFetchedResultsController envia umNSFetchedResultsChangeUpdate evento com um indexPath que não existe mais nesse ponto.

Por exemplo: O conjunto de resultados do controlador de resultados buscados contém 1 seção com 4 objetos. O primeiro objeto é excluído em um thread. O último objeto é atualizado em um segmento diferente. Então às vezes acontece o seguinte:

controllerWillChangeContent: é chamado.controller: didChangeObject: atIndexPath: forChangeType: newIndexPath: é chamado com type = NSFetchedResultsChangeDelete, indexPath.row = 0.controller: didChangeObject: atIndexPath: forChangeType: newIndexPath: é chamado com type = NSFetchedResultsChangeUpdate, indexPath.row = 3.

Mas o controlador de resultados buscados contém apenas 3 objetos agora, e se chamar

MyManagedObject *obj = [controller objectAtIndexPath:indexPath]

para atualizar a célula de exibição de tabela de acordo com oNSFetchedResultsChangeUpdate evento, isso trava com umNSRangeException exceção.

Obrigado por qualquer ajuda ou idéias!

questionAnswers(2)

yourAnswerToTheQuestion