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!