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!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage