我发布了一篇与此类似的帖子,但我的问题已经回答了一半。我希望能够滑动删除行,但然后将该数据保存到我的xcdatamodeld文件。我在xcdatamodeld中有一个名为removeTask的属性,但就我而言。任何帮助表示赞赏
//Removing Tasks
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()
}
}
func saveToCoreData(task: Task) {
do {
try managedObjectContext.save()
} catch {
fatalError("Failure to save context: \(error)")
}
}
答案 0 :(得分:3)
您必须删除核心数据堆栈中数据源数组和中的对象:
// 1)
let task = tasks.remove(at: indexPath.row)
managedObjectContext.delete(task)
// 2)
saveToCoreData(task: task)
// 3)
tableView.deleteRows(at: [indexPath], with: .fade)
旁注:
beginUpdates() / endUpdates()
。答案 1 :(得分:0)
// Insert Into CoreData (very important)
let managedObject = NSEntityDescription.insertNewObject(forEntityName: "removedTask", into: self.managedObjectContext)
// assign values
managedObject.value = task.value
这些操作是歧义的来源。
从saveToCoreData
调用commit editingStyle:
时,其唯一目的是将上下文中所做的更改传递给持久存储。
通过执行NSEntityDescription.insertNewObject
,在上下文中创建了一个新对象,这绝对不是这里的意图。
如下修改saveToCoreData
将有助于:
func saveToCoreData(task: Task) {
do {
try managedObjectContext.save()
} catch {
fatalError("Failure to save context: \(error)")
}
// for updating tasks array with the latest data set
let tasksFetch = NSFetchRequest(entityName: "Task") // "Task" or whatever is the actual name of entities stored in tasks array
do {
tasks = try managedObjectContext.executeFetchRequest(tasksFetch) as! [Task]
} catch {
fatalError("Failed to fetch task: \(error)")
}
}