2010-11-25 12 views
1

Wenn ich eine Reihe von meinem Tisch mit einer Standard-Animation lösche wie UITableViewRowAnimationFade der Code mit diesem Fehler abstürzt:Löschen von Tabellenzeile mit Animation mit Kerndaten

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 1. The number of rows contained in an existing section after the update (4) must be equal to the number of rows contained in that section before the update (4), plus or minus the number of rows inserted or deleted from that section (0 inserted, 1 deleted).'

Wenn ich die Animation Linie der Zeile Entfernen entfernen/Löschen funktioniert, aber ich habe nicht mehr den coolen Apple Löschübergang.

Hier ist mein Code - jede Hilfe wird geschätzt. Diese Methode zum Löschen von Zeilen arbeitete vor iOS4, nicht sicher, ob etwas geändert hat?

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 

    // If row is deleted, remove it from the list. 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     NSIndexPath *path = [NSIndexPath indexPathForRow:indexPath.row inSection:0]; 
     MyItem *myItem = [self.getItemsFetchedResultsController objectAtIndexPath:path]; 
     [dataRepository deleteItem:myItem]; 

     // If I comment this line out the delete works but I no longer have the animation 
     [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 

     [self.tableView reloadData]; 

    } 

} 

Data Repository:

-(void)deleteItem:(MyItem *)myItem { 
    [self.managedObjectContext deleteObject:myItem]; 
    [self saveCurrentContext]; 
} 

Antwort

0

Ein Grund dafür sein könnte, wenn Sie NSFetchedResultsControllerDelegate und umgesetzt controller:didChangeObject:atIndexPath:forChangeType:newIndexPath: gesetzt haben Es wird aufgerufen, wenn Sie den Kontext speichern und die Tabellenansicht in Ihrem Namen aktualisieren . Sie könnten Code wie dieses:

case NSFetchedResultsChangeDelete: 
      [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
      break; 

Im Allgemeinen, wenn Sie den Fehler bedeutet dies, dass Sie die Datenquelle nicht in der Art und Weise aktualisiert haben Sie mit deleteRowsAtIndexPaths:withRowAnimation: angegeben. Wenn Sie diese Methode aufrufen, garantieren Sie, dass Sie die Datenquelle bereits aktualisiert haben, um diese Änderung widerzuspiegeln.

+0

Vielen Dank für Ihre Antwort, aber ich habe NSFetchedResultsControllerDelegate nicht umgesetzt - das klingt wie etwas, das ich schauen in sollte. Ich habe es geschafft, mein Problem zu beheben und habe die Antwort geschrieben – KSoza

4

beschloß ich dieses Problem, indem Sie diesen Code vor und nach der Tabelle Update:

[tableView beginUpdates]; 
if (editingStyle == UITableViewCellEditingStyleDelete) { 
    ... 
} 
[tableView endUpdates]; 
+0

Ich habe versucht, dies zu tun, aber es funktioniert immer noch nicht für mich. Bitte helfen Sie – amavi