Hallo nochmal! =)
Mein Problem mit CoreData habe ich gelöst und bin Happy endlich CoreData im Kopf zu haben
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:
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:
In controllerDidChangecontent wird lediglich [self.tableView endUpdates]; aufgerufen.
Meine Editing-Methode sieht so aus:
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
Mein Problem mit CoreData habe ich gelöst und bin Happy endlich CoreData im Kopf zu haben
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:
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:
Wenn ich aber die App vor dem Löschen beende und wieder aufrufe, und dann wieder löschen will, funktioniert das Löschen.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)
In controllerDidChangecontent wird lediglich [self.tableView endUpdates]; aufgerufen.
Meine Editing-Methode sieht so aus:
Quellcode
- - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
- {
- if (editingStyle == UITableViewCellEditingStyleDelete) {
- // Delete the managed object for the given index path
- NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
- [context deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]];
- //NSLog(@"DATE: %@", [[UIApplication sharedApplication] scheduledLocalNotifications]);
- for (UILocalNotification *notification in [[UIApplication sharedApplication] scheduledLocalNotifications]) {
- NSLog(@"N: %@", notification.fireDate);
- NSLog(@"O: %@", [[self.fetchedResultsController objectAtIndexPath:indexPath] valueForKey:@"zeit"]);
- if (notification.fireDate == [[self.fetchedResultsController objectAtIndexPath:indexPath] valueForKey:@"zeit"]) {
- [[UIApplication sharedApplication] cancelLocalNotification:notification];
- NSLog(@"GELÖSCHT!");
- }
- }
- // Save the context.
- NSError *error = nil;
- if (![context save:&error]) {
- /*
- Replace this implementation with code to handle the error appropriately.
- 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.
- */
- NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
- abort();
- }
- }
- }
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