我知道这是一个非常简单和基本的问题,特别是对于使用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
有人可以帮助我了解它的工作原理吗?
答案 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 { }