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!

questionAnswers(2)

yourAnswerToTheQuestion