如何从TableView中删除特定的coreData对象

时间:2017-10-20 14:03:28

标签: swift uitableview core-data

所以我试图从tableView中删除数据,它将删除行中的单元格,但它不会从coreData中删除信息,导致它再次加载我打电话给.reloadData()。我对coredata很新,我不知道如何选择我制作的特定Recipe项目。

我在这里处理删除:

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    if (editingStyle == UITableViewCellEditingStyle.delete) {
        // handle delete (by removing the data from your array and updating the tableview)
        recipes.remove(at: indexPath.row)
        tableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.automatic)

    }

}

这是我如何在coreData中创建项目,如果这有帮助的话。另外,如果有人愿意深入了解

,我有一个Git存储库here
@IBAction func createNewRecipeButton(_ sender: Any) {
        let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
        let newRecipe = Recipe(context: context)
        newRecipe.title = recipeTitleTextBox.text
        newRecipe.instructions = recipeInstructionsTextBox.text
        newRecipe.time = recipeTimeTextBox.text
        (UIApplication.shared.delegate as! AppDelegate).saveContext()
        navigationController!.popToRootViewController(animated: true)
}

1 个答案:

答案 0 :(得分:1)

您当前的删除方法只是从存储阵列中删除配方。你需要告诉上下文摆脱它......

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    if (editingStyle == UITableViewCellEditingStyle.delete) {
        let recipe = recipes.remove(at: indexPath.row)
        tableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.automatic)
        guard let moc = recipe.managedObjectContext else { return }
        moc.delete(recipe)
        moc.processPendingChanges()
    }
}

您可能还想查看使用NSFetchedResultsController。有几个教程。