Excepción NSRangeException en el evento NSFetchedResultsChangeUpdate de NSFetchedResultsController
tengo unUITableView
que usa unNSFetchedResultsController
como fuente de datos.
El almacén de datos principales se actualiza en varios subprocesos en segundo plano que se ejecutan en paralelo (cada subproceso utiliza su propioNSManagedObjectContext
).
El hilo principal observa laNSManagedObjectContextDidSaveNotification
notificación y actualizaciones es contexto conmergeChangesFromContextDidSaveNotification:
.
A veces sucede que laNSFetchedResultsController
envía unNSFetchedResultsChangeUpdate
evento con una indexPath que ya no existe en ese punto.
Por ejemplo: el conjunto de resultados del controlador de resultados obtenido contiene 1 sección con 4 objetos. El primer objeto se elimina en un hilo. El último objeto se actualiza en un hilo diferente. Entonces a veces sucede lo siguiente:
controllerWillChangeContent: se llama.controller: didChangeObject: atIndexPath: forChangeType: newIndexPath: se llama con type = NSFetchedResultsChangeDelete, indexPath.row = 0.controller: didChangeObject: atIndexPath: forChangeType: newIndexPath: se llama con type = NSFetchedResultsChangeUpdate, indexPath.row = 3.Pero el controlador de resultados obtenido solo contiene 3 objetos ahora, y si se llama
MyManagedObject *obj = [controller objectAtIndexPath:indexPath]
para actualizar la celda de vista de tabla de acuerdo con laNSFetchedResultsChangeUpdate
evento, esto se estrella con unaNSRangeException
excepción.
¡Gracias por cualquier ayuda o ideas!