commitEditingStyle und endUpdates - Fehler mit XCode Template

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • commitEditingStyle und endUpdates - Fehler mit XCode Template

    Hallo nochmal! =)

    Mein Problem mit CoreData habe ich gelöst und bin Happy endlich CoreData im Kopf zu haben :D
    Jedoch bin ich über ein fehler gestoßen, den ich einfach nicht in Griff bekomme.

    Folgendes passiert:

    Ich habe meinem UITableView folgende Methode hinzugefügt, um dem Anwender ein Löschen einer Zeile zubieten:

    Quellcode

    1. (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath


    Kopiert habe ich diese Methode aus dem XCode Template mit der Erstelloption "Use CoreData for Storage".
    Sobald der Anwender über ein Touch auf den "addButton" im UITableView ein neues UIView gepusht bekommt, soll er Informationen in diesem UIView zu einer Entität eingeben. Über ein Touch im UIView auf den "saveButton" werden die Informationen ausgelesen und im Context gespeichert. Außerdem wird die UIView gepopt und der Anwender gelangt wieder zum UITableView.

    Dort steht dann auch der neue Eintrag in einer neuen Row. Wenn der User nun merkt er hat ein Fehler gemacht und will diese Row gleich löschen (wischen von links nach rechts und dann Touch auf "Delete") bleibt meine App stehen und es passiert nichts mehr. Folgender Fehler wird mir geschmissen:

    An exception was caught from the delegate of NSFetchedResultsController during a call to -controllerDidChangeContent:. Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (1) must be equal to the number of rows contained in that section before the update (1), plus or minus the number of rows inserted or deleted from that section (0 inserted, 1 deleted). with userInfo (null)
    Wenn ich aber die App vor dem Löschen beende und wieder aufrufe, und dann wieder löschen will, funktioniert das Löschen.
    In controllerDidChangecontent wird lediglich [self.tableView endUpdates]; aufgerufen.

    Meine Editing-Methode sieht so aus:

    Quellcode

    1. - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
    2. {
    3. if (editingStyle == UITableViewCellEditingStyleDelete) {
    4. // Delete the managed object for the given index path
    5. NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
    6. [context deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]];
    7. //NSLog(@"DATE: %@", [[UIApplication sharedApplication] scheduledLocalNotifications]);
    8. for (UILocalNotification *notification in [[UIApplication sharedApplication] scheduledLocalNotifications]) {
    9. NSLog(@"N: %@", notification.fireDate);
    10. NSLog(@"O: %@", [[self.fetchedResultsController objectAtIndexPath:indexPath] valueForKey:@"zeit"]);
    11. if (notification.fireDate == [[self.fetchedResultsController objectAtIndexPath:indexPath] valueForKey:@"zeit"]) {
    12. [[UIApplication sharedApplication] cancelLocalNotification:notification];
    13. NSLog(@"GELÖSCHT!");
    14. }
    15. }
    16. // Save the context.
    17. NSError *error = nil;
    18. if (![context save:&error]) {
    19. /*
    20. Replace this implementation with code to handle the error appropriately.
    21. abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
    22. */
    23. NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    24. abort();
    25. }
    26. }
    27. }
    Alles anzeigen


    Ich denke das er die Row zwar added abe rnicht war nimmt und dann eine Row löschen soll die er noch nicht kennt. Verstehe ich das richtig?
    Weiß aber nicht so genau wo ich den Fehler behebe...
    Was kann ich da machen? Jemand ein Tipp?

    Gruß
    Marvin