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

标签 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()
    }
}

最佳答案

不要让您是初学者的事实妨碍您使用这个强大的持久存储 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/

相关文章:

objective-c - 使用关系从核心数据数据库中删除所有表记录

ios - 在 UIScrollView 中滚动一个 UIView

c++ - 如何在 Xcode 中检测带有宏的 C++ 编译器?

iOS:将数据存储在内存中而不是磁盘上

iphone - 不同设备和模拟器的颜色看起来不同

objective-c - Xcode - 如何创建随主窗口移动的粘性面板窗口?

ios - Core Data <Fault> 使用一次后

ios - 快速:UIImageVIew 错误

swift - canOpenURL 谷歌地图问题

objective-c - Swift 中的 CoreData 到数组