这里的初学者可能不应该尝试核心数据,但无论如何,我希望能够通过滑动删除一行。我已经这样做但它没有保存已删除的单元格,它们又回来了。我正在使用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()
}
}
答案 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!")
}
}