Ios 从UITableView中删除行时Swift应用程序崩溃

Ios 从UITableView中删除行时Swift应用程序崩溃,ios,swift,uitableview,Ios,Swift,Uitableview,我知道这是一个非常简单和基本的问题,特别是对于那些与Swift合作4年的人来说,但我坚持了 我正在尝试删除具有以下内容的行: let deleteAction = UITableViewRowAction(style: .destructive, title: "Delete") { (action, indexPath) in do { self.usersTableView.beginUpdates() self.viewMod

我知道这是一个非常简单和基本的问题,特别是对于那些与Swift合作4年的人来说,但我坚持了

我正在尝试删除具有以下内容的行:

let deleteAction = UITableViewRowAction(style: .destructive, title: "Delete") { (action, indexPath) in
        do {
            self.usersTableView.beginUpdates()
            self.viewModel.users.remove(at: indexPath.row)
            self.coreDataStack.mainContext.delete(user)
            self.usersTableView.deleteRows(at: [indexPath], with: .automatic)
            self.usersTableView.endUpdates()

            try self.coreDataStack.mainContext.save()                
        } catch let error as NSError {
            print("Could not delete the user \(user) because of the \(error), \(error.userInfo)")
        }
    }
还有我的

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return self.viewModel.users.count
}
我尝试点击删除按钮时崩溃,出现下一个错误:

attempt to delete row 0 from section 0 which only contains 0 rows before the update

有人能帮助我了解它是如何工作的吗?

从UITableView和UICollectionView中删除行的最佳有效方法是使用PerformBatChUpdate(它仅适用于iOS 11+)


请尝试删除BeginUpdate()和endUpdates(),然后尝试显示ViewModel和“coreDataStack”的代码好吗?您的错误表示您正在尝试从节0中删除第0行,该节中没有任何单元格。另外,将代码顺序更改为:->self.usersTableView.deleteRows(at:[indexPath],with:.automatic)self.viewModel.users.remove(at:indexPath.row)self.coreDataStack.mainContext.delete(user)self.usersTableView.endUpdates()。您是否使用
FetchedResultsController
?@Paulw11不,我只是使用fetchRequest获取所有用户
if #available(iOS 11.0, *) {
       self.usersTableView.performBatchUpdates({
             self.viewModel.users.remove(at: indexPath.row)
             self.coreDataStack.mainContext.delete(user)
             self.usersTableView.deleteRows(at: [indexPath], with: .automatic)                      
             }, completion: { (finish) in
             self.usersTableView.reloadData()         
             }) 

       }
       else { }