如何从数据核心 swift 4 中删除 tableview index.row

Posted

技术标签:

【中文标题】如何从数据核心 swift 4 中删除 tableview index.row【英文标题】:How to delete a tableview index.row from data core swift 4 【发布时间】:2018-10-31 20:47:37 【问题描述】:

我创建了一个名为Medications的实体,添加新数据的功能是:

@objc func saveUserSettings() 

    SVProgressHUD.show()

    let name = medicationNameTextField.text
    let dosage = dosageTextField.text
    let frequency = medicationNameTextField.text
    let reminder = dosageTextField.text

    let medication = Medications(context: PersistenceService.context)
    medication.name = name
    medication.dosage = dosage
    medication.frequency = frequency
    medication.reminder = reminder

    PersistenceService.saveContext()
    self.meds.append(medication)


按下表格视图单元格上的删除按钮时,如何删除其中一个索引?

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) 

    if editingStyle == .delete 

        meds.remove(at: indexPath.row)

        let task = meds[indexPath.row]

        PersistenceService.saveContext()

        self.tableView.reloadData()
            


有什么想法吗?

【问题讨论】:

在这种情况下不要使用self.tableView.reloadData()。使用self.tableView.deleteRows(at: [indexPath], with: .fade) 获得漂亮的单元格动画。 【参考方案1】:

在这里从数组中删除

meds.remove(at: indexPath.row)

不会自动将其从 coreData 中移除,您需要使用

context.delete(object)

在保存上下文之前,请参阅此处Swift 3 Core Data Delete Object

也要按正确的顺序来做

let task = meds[indexPath.row]

context.delete(task) // access context anywhere but this statement should run

PersistenceService.saveContext()

meds.remove(at: indexPath.row)

【讨论】:

对象是什么?不明白(对象)

以上是关于如何从数据核心 swift 4 中删除 tableview index.row的主要内容,如果未能解决你的问题,请参考以下文章

如何从核心数据swift中删除项目3

swift - 当persistentContainer不在App委托方法中时如何从核心数据中删除所有数据

如何从 Swift 的核心数据中删除特定的实体数据?

SWIFT 的核心数据:如何从关系实体中删除对象?

如何在 Swift 2.0 中滑动删除核心数据表视图

从核心数据模型 Swift 3 中删除一行