为什么我无法删除核心数据中表的数据

时间:2015-12-11 05:02:04

标签: swift core-data

我正在做一个示例应用程序:一个添加按钮以添加联系人的电话号码;当我滑动该行时,它会显示删除,我可以删除行中的数据,同时,coredata中的数据也消失了。

我做了以下代码:添加功能适用于tableview和核心数据。但对于删除一个,我可以删除tableview中的数据,但似乎数据不会从核心数据中删除。但是,它没有给我一个错误信息。我只是不知道出了什么问题,为什么我不能在核心数据中删除它。请帮忙。谢谢。

  func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
        let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

        let managedContext = appDelegate.managedObjectContext


        if (editingStyle == UITableViewCellEditingStyle.Delete){

             let item = items[indexPath.row]


                managedContext.deleteObject(item)


                items.removeAtIndex(indexPath.row)

            tableView.reloadData()

        }
    }





    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        // fetching the contacts from the core data

        let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

        let managedContext = appDelegate.managedObjectContext

        let fetchRequest = NSFetchRequest(entityName: "Contact")

        do {

          let results = try managedContext.executeFetchRequest(fetchRequest)
            items = results as! [NSManagedObject]


        } catch {
            print("there is an error")

        }

    }

1 个答案:

答案 0 :(得分:0)

您需要保存managedContext以进行更改(删除)以反映。

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let managedContext = appDelegate.managedObjectContext

    if (editingStyle == UITableViewCellEditingStyle.Delete){
         let item = items[indexPath.row]
         managedContext.deleteObject(item)

         do {
             try managedContext.save()
         } catch let error as NSError {
             print("\(error)") 
         }

         items.removeAtIndex(indexPath.row)
         tableView.reloadData()
    }
}