Wyjątek NSRangeException w zdarzeniu NSFetchedResultsChangeUpdate NSFetchedResultsController
mamUITableView
który używaNSFetchedResultsController
jako źródło danych.
Podstawowy magazyn danych jest aktualizowany w wielu wątkach w tle działających równolegle (każdy wątek korzysta z własnego wątku)NSManagedObjectContext
).
Główny wątek obserwujeNSManagedObjectContextDidSaveNotification
powiadomienie i aktualizuje jego kontekstmergeChangesFromContextDidSaveNotification:
.
Czasami zdarza się, żeNSFetchedResultsController
wysyłaNSFetchedResultsChangeUpdate
zdarzenie z indexPath, która już nie istnieje.
Na przykład: zestaw wyników pobranego kontrolera wyników zawiera 1 sekcję z 4 obiektami. Pierwszy obiekt zostanie usunięty w jednym wątku. Ostatni obiekt jest aktualizowany w innym wątku. Czasami zdarza się, że:
controllerWillChangeContent: jest wywoływany.controller: didChangeObject: atIndexPath: forChangeType: newIndexPath: jest wywoływany z typem = NSFetchedResultsChangeDelete, indexPath.row = 0.controller: didChangeObject: atIndexPath: forChangeType: newIndexPath: jest wywoływane z typem = NSFetchedResultsChangeUpdate, indexPath.row = 3.Ale pobrany kontroler wyników zawiera teraz tylko 3 obiekty i jeśli wywołanie
MyManagedObject *obj = [controller objectAtIndexPath:indexPath]
zaktualizować komórkę widoku tabeli zgodnie zNSFetchedResultsChangeUpdate
zdarzenie to ulega awariiNSRangeException
wyjątek.
Dziękujemy za pomoc lub pomysły!