Ios 从UITableView中删除行时Swift应用程序崩溃
我知道这是一个非常简单和基本的问题,特别是对于那些与Swift合作4年的人来说,但我坚持了 我正在尝试删除具有以下内容的行: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
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 { }