我正在实现一个UITableView。我也在用CoreData。它工作正常,但当我尝试删除一行时,会出现以下错误:
断言失败-[UITableView\uEndCellAnimationsWithContext:]
以下是我的实现:

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .delete{
        guard let appDelegate =
            UIApplication.shared.delegate as? AppDelegate else {
                return
        }

        let managedContext =
            appDelegate.persistentContainer.viewContext

        let fetchRequest =
            NSFetchRequest<NSManagedObject>(entityName: "Developers")
        do {
            let test = try managedContext.fetch(fetchRequest)
            let objectToDelete = test[indexPath.row]
            managedContext.delete(objectToDelete)
            do{
                try managedContext.save()
            }catch{
                print(error)
            }
        }catch{
            print(error)
        }

        self.tableView.beginUpdates()
        tableView.deleteRows(at: [indexPath], with: .none)
        self.tableView.endUpdates()
    }
}

问题就在这一行tableView.deleteRows(at: [indexPath], with: .none)
但我不知道为什么。我发现大多数示例都实现了相同的3行代码:
self.tableView.beginUpdates()
tableView.deleteRows(at: [indexPath], with: .none)
self.tableView.endUpdates()

你们中有人知道我在做什么或是为了避免这个错误吗?

最佳答案

1-你只需要deleteRows就可以摆脱beginUpdates&endUpdates

tableView.deleteRows(at: [indexPath], with: .none)

2-从Coredata中删除,而应从表的dataSource数组中删除
let test = try managedContext.fetch(fetchRequest)
let objectToDelete = test[indexPath.row]
managedContext.delete(objectToDelete)

就像
arr.remove(at:indexPath.row)

关于ios - iOS:删除UItableviewCell时出错:-[UITableView _endCellAnimationsWithContext:]中的断言失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56673175/

10-14 21:39
查看更多