同时从tableview行和核心数据中删除项目

问题描述:

我试图从TableView和名为“Books”的实体中删除项目。然而,我不知道我是否在遥远的轨道上。当我尝试此代码:同时从tableview行和核心数据中删除项目

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { 

     var appdel:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
     var context:NSManagedObjectContext = appdel.managedObjectContext! 
     var request = NSFetchRequest(entityName: "Books") 

     if editingStyle == UITableViewCellEditingStyle.Delete { 

      addBook.myBooks.removeAtIndex(indexPath.row) 
      tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic) 
      context.deleteObject(addBook.myBooks[indexPath.row] as! NSManagedObject) 

     } 
    } 

我得到的最后一行写着警告“从‘字符串’到不相关类型的‘NSManagedObject’总是失败演员。”有谁知道我如何解决这个问题?我读过你可以使用fetchedResultsController轻松处理表格中的核心数据,但我是编程新手,发现通常在设置核心数据时这种方法有点混乱。是否需要管理我的TableView中的数据的fetchedResultsController?

后从你的错误,它听起来就像是addBook.myBooks字符串数组。

目前的问题是deleteObject不适用于字符串,它适用于托管对象 - 即NSManagedObject的实例或NSManagedObject的子类。你不能像这样从核心数据中删除一个字符串,你必须删除与该字符串对应的被管理对象。该错误明确告诉您as! NSManagedObject对字符串不起作用,因为字符串与管理对象完全不同。

[这也是你在indexPath.row通过removeAtIndex去除串,再后来尝试使用在indexPath.row你只是删除了字符串中的问题,但在这里,这不是真正的问题。]

什么您需要做的是找到与您要删除的表视图行对应的托管对象,然后将其传递给deleteObject。如果没有您的视图控制器是如何工作的,这是不可能说究竟你会怎么做,但也有很清楚两件事情更全面:

  1. 那些第一三线在你的方法没有做任何事情有用。切断他们 - 即使你让他们工作,他们在这里也会是错误的做法。您不希望必须获取您在此处删除的管理对象。当你达到这个方法时,你应该已经知道了足够的把它删除。

  2. 这不是必要使用NSFetchedResultsController将核心数据与表视图。但是如果你对编程不熟悉,那么如果你使用它,可能会发现更容易。

尝试保存您的上下文DeleteObject的

context.deleteObject(addBook.myBooks![indexPath.row]) 
      addBook.myBooks.removeAtIndex(indexPath.row) 

      do { 
       try context.save() 
      } 
      catch { 
       print("Error") 
      } 

      self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic) 


     }