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

时间:2018-08-04 17:15:53

标签: ios swift uitableview

我知道这是一个非常简单和基本的问题,特别是对于使用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

有人可以帮助我了解它的工作原理吗?

1 个答案:

答案 0 :(得分:0)

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

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 { }