NSRangeException-Ausnahme im NSFetchedResultsChangeUpdate-Ereignis von NSFetchedResultsController
Ich habe einUITableView
das nutzt eineNSFetchedResultsController
als Datenquelle.
Der Kerndatenspeicher wird in mehreren parallel laufenden Hintergrundthreads aktualisiert (jeder Thread verwendet einen eigenen Thread)NSManagedObjectContext
).
Der Hauptthread beobachtet dieNSManagedObjectContextDidSaveNotification
Benachrichtigung und Aktualisierung des Kontexts mitmergeChangesFromContextDidSaveNotification:
.
Manchmal kommt es vor, dass dieNSFetchedResultsController
sendet eineNSFetchedResultsChangeUpdate
Ereignis mit einem Indexpfad, der zu diesem Zeitpunkt nicht mehr vorhanden ist.
Beispiel: Die Ergebnismenge des Controllers für abgerufene Ergebnisse enthält 1 Abschnitt mit 4 Objekten. Das erste Objekt wird in einem Thread gelöscht. Das letzte Objekt wird in einem anderen Thread aktualisiert. Dann passiert manchmal folgendes:
controllerWillChangeContent: wird aufgerufen.controller: didChangeObject: atIndexPath: forChangeType: newIndexPath: wird mit type = NSFetchedResultsChangeDelete, indexPath.row = 0 aufgerufen.controller: didChangeObject: atIndexPath: forChangeType: newIndexPath: wird mit type = NSFetchedResultsChangeUpdate, indexPath.row = 3 aufgerufen.Aber der Controller für abgerufene Ergebnisse enthält jetzt nur noch 3 Objekte und if call
MyManagedObject *obj = [controller objectAtIndexPath:indexPath]
um die Tabellenzelle gemäß der Tabelle zu aktualisierenNSFetchedResultsChangeUpdate
Event, dies stürzt ab mit einemNSRangeException
Ausnahme.
Vielen Dank für jede Hilfe oder Ideen!