Swift将删除的行保存到核心数据

时间:2017-02-17 20:44:30

标签: swift xcode core-data delete-row

这里的初学者可能不应该尝试核心数据,但无论如何,我希望能够通过滑动删除一行。我已经这样做但它没有保存已删除的单元格,它们又回来了。我正在使用xcdatamodeld文件。如果有人能告诉我如何将已删除的文件保存到核心数据中,那就太棒了!

这是我的保存数据代码:

inputAlert.addAction(UIAlertAction(title: "Save", style: .default, handler: { (action:UIAlertAction) in

        let taskTextField = inputAlert.textFields?.first
        let descTextField = inputAlert.textFields?.last

        if taskTextField?.text != "" && descTextField?.text != "" {
            taskItem.task = taskTextField?.text
            taskItem.desc = descTextField?.text

            do {
                try self.managedObjectContext.save()
                self.loadData()
            }catch {
                print("Could not save data \(error.localizedDescription)")
            }
        }

以下是我目前删除的代码:

override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == UITableViewCellEditingStyle.delete {
        tasks.remove(at: indexPath.row)
        tableView.reloadData()
    }
}

1 个答案:

答案 0 :(得分:0)

不要让你是初学者的事实阻止你使用这个强大的持久存储朋友。 CoreData是一个很大的主题,已经在其上编写了书籍,但是一旦你理解了用它编程的核心概念,它就能很好地工作。您好像要删除UITableView中填充的数据,然后将删除的内容保存到CoreData中。让我们分解这些步骤,并为您提供一些在您自己的项目中使用的示例。

1)从UITableView的数据源中删除数据

2)将NSManagedObject保存到CoreData

3)从UITableView

删除行
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == UITableViewCellEditingStyle.delete {

        // 1)
        let task = tasks.remove(at: indexPath.row)

        // 2)
        saveToCoreData(task: task)

        // 3)
        tableView.beginUpdates()
        tableView.deleteRows(at: [indexPath], with: .fade)
        tableView.endUpdates()
    }
}

// Assuming your task is of type "`Task`". You should put whatever data type your task object actually is.
func saveToCoreData(task: Task) {

    // Insert Into CoreData (very important)
    let managedObject = NSEntityDescription.insertNewObject(forEntityName: "RemovedTask", into: self.context)

    // assign values
    managedObject.value = task.value

    // Save CoreData Context (also, very important)
    do {
        self.context.save()
    }
    catch {
        print("Could not save CoreData!")
    }
}