Hi,
hab folgendes Problem:
ich hab einen TableView mit Einträgen. diese kann ich per rowAction-Funktion löschen und "abhaken". das funktioniert auch. für die "abhaken"-funktion hat meine entity einen boolean wert welcher entweder auf true oder false gesetzt wird und im coredata gespeichert wird, der text der cell wird dann normal oder durchgestrichen angezeigt.
Alles anzeigen
wenn ich jetzt aber einen Eintrag abhake bekomme ich folgenden Fehler:
und ich kann die cell nicht mehr zur Seite "swipen" und wenn ich einen ertrag hinzufüge zeigt es mir den nicht mehr an. erst wenn die app neu gesteuert wird.
wenn ich in controllerDidChangeContent das self.tableView.endEditing() gegen self.tableView.reloadData() austausche bekomme ich zumindest keinen Fehler angezeigt, aber swipe und hinzufügen geht immer noch nicht.
ich versteh auch nicht wieso da steht 1 inserted, 0 deleted. Ich füge doch keine neue row hinzu sondern ändere nur ein Attribut. oder nicht?
Wie kann ich diesen Fehler beheben?
Danke und Gruß
Micha
hab folgendes Problem:
ich hab einen TableView mit Einträgen. diese kann ich per rowAction-Funktion löschen und "abhaken". das funktioniert auch. für die "abhaken"-funktion hat meine entity einen boolean wert welcher entweder auf true oder false gesetzt wird und im coredata gespeichert wird, der text der cell wird dann normal oder durchgestrichen angezeigt.
Quellcode
- override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? {
- //DeleteAction
- let deleteAction = UITableViewRowAction(style: .Normal, title: "\u{2717} \n Löschen") { action, index in
- print("deleteAction")
- let context = self.fetchedResultsController.managedObjectContext
- context.deleteObject(self.fetchedResultsController.objectAtIndexPath(indexPath) as NSManagedObject)
- // Save the context.
- do {
- try context.save()
- } catch {
- // 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.
- //print("Unresolved error \(error), \(error.userInfo)")
- abort()
- }
- }
- deleteAction.backgroundColor = UIColor.clearColor()
- //CompleteAction
- let completeAction = UITableViewRowAction(style: .Normal, title: "\u{2713} \n Gemacht" ) { action, index in
- print("completeAction")
- let object = self.fetchedResultsController.objectAtIndexPath(indexPath) as NSManagedObject
- let title = object.valueForKey("title")?.description
- let subtitle = object.valueForKey("subtitle")?.description
- let completed = object.valueForKey("completed")?.boolValue
- print(completed!)
- let predicate = NSPredicate(format: "title == %@ AND subtitle == %@", title!, subtitle!)
- let request = NSFetchRequest(entityName: "PlanMenue")
- request.predicate = predicate
- var result = [NSManagedObject]()
- do {
- result = try self.managedObjectContext!.executeFetchRequest(request) as! [NSManagedObject]
- } catch {
- }
- if completed! {
- print("completed set to false")
- result[0].setValue(false, forKey: "completed")
- // Save the context.
- do {
- try self.managedObjectContext!.save()
- } catch {
- }
- } else {
- print("completed set to true")
- result[0].setValue(true, forKey: "completed")
- // Save the context.
- do {
- try self.managedObjectContext!.save()
- } catch {
- }
- }
- self.tableView.setEditing(false, animated: true)
- }
- completeAction.backgroundColor = UIColor.clearColor()
- return [deleteAction, completeAction]
- }
wenn ich jetzt aber einen Eintrag abhake bekomme ich folgenden Fehler:
Quellcode
- CoreData: error: Serious application error. 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 (5) must be equal to the number of rows contained in that section before the update (5), plus or minus the number of rows inserted or deleted from that section (1 inserted, 0 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out). with userInfo (null)
wenn ich in controllerDidChangeContent das self.tableView.endEditing() gegen self.tableView.reloadData() austausche bekomme ich zumindest keinen Fehler angezeigt, aber swipe und hinzufügen geht immer noch nicht.
ich versteh auch nicht wieso da steht 1 inserted, 0 deleted. Ich füge doch keine neue row hinzu sondern ändere nur ein Attribut. oder nicht?
Wie kann ich diesen Fehler beheben?
Danke und Gruß
Micha