NSFetchedResultsController: usuwanie 1 wiersza powoduje awarię aplikacji

Usunięcie wiersza z UITableView zasilanego przez NSFetchedResultsController powoduje awarię mojej aplikacji.

Błąd to:

* Błąd asercji w - [UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit/UIKit-2903.23/UITableView.m:1330
*
 Zakończenie aplikacji z powodu nie przechwyconego wyjątku „NSInternalInconsistencyException”, powód: „Niepoprawna aktualizacja: niepoprawna liczba wierszy w sekcji 0. Liczba wierszy zawartych w istniejącej sekcji po aktualizacji (1) musi być równa liczbie wierszy zawartych w tej sekcji sekcja przed aktualizacją (1), plus lub minus liczba wierszy wstawionych lub usuniętych z tej sekcji (0 wstawione, 1 usunięte) i plus lub minus liczba wierszy przeniesionych do lub z tej sekcji (0 przeniesionych, 0 przeniesionych na zewnątrz).'

Chcę tylko przesuwać, aby usunąć. Mój kod usuwania wygląda następująco:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{  
    [self.tableView beginUpdates];  
    SequenceData *sd = [self.fetchedResultsController objectAtIndexPath:indexPath];  
    [self.managedObjectContext deleteObject:sd];  
    [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
                          withRowAnimation:UITableViewRowAnimationFade];  
    [self.tableView endUpdates];  
}

Mój NSFetchedResultsController jest skonfigurowany tak jak w samouczku Raya Wanderlicha (http://www.raywenderlich.com/999/core-data-tutorial-for-ios-how-to-use-nsfetchedresultscontroller)

Liczba wierszy jest określana przez:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {    
    id sectionObjects = [[self.fetchedResultsController sections] objectAtIndex:section];  
    NSInteger nbObjects = [sectionObjects numberOfObjects];  
    return nbObjects;  
}

Wygląda na to, że pobieranie nie jest aktualizowane (liczba wierszy nie zmienia się). Czy muszę pobierać samego siebie (czy nie zajmuje się tym kontroler pobierania)?

Oczywiście brakuje mi tutaj czegoś podstawowego. Nie wahaj się sugerować podstawowych odpowiedzi.

Najpierw zaimplementowałem to za pomocą kontrolera: metoda didChangeObject: .... Błąd był taki sam, ale niektóre szczegóły się różniły.

Edytować Wierzę, że mój problem został rozwiązany. Obie odpowiedzi (od CX i Martina) pomogły mi je znaleźć. Martin dostał odpowiedź z powodu wyjaśnień, które pomogły mi trochę lepiej zrozumieć ...

questionAnswers(2)

yourAnswerToTheQuestion