这里有点初学者,所以可能不应该尝试核心数据的东西,但无论如何,我希望能够通过滑动来删除一行。我已经这样做了,但它不会保存已删除的单元格,它们会再次出现。我正在使用 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()
}
}
最佳答案
不要让您是初学者的事实妨碍您使用这个强大的持久存储 friend 。 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!")
}
}
关于Swift 将删除的行保存到核心数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42307034/