Swift 3.0 无法从 UITableView 中删除一行
Posted
技术标签:
【中文标题】Swift 3.0 无法从 UITableView 中删除一行【英文标题】:Swift 3.0 Unable to delete a row from a UITableView 【发布时间】:2017-01-28 08:59:51 【问题描述】:我正在使用 Xcode 8 和 swift 3。
当我尝试从 UITableView 中删除一行时遇到断言失败。
-[UITableView _endCellAnimationsWithContext:] 中的断言失败,/BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3599.5/UITableView.m:1610
由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效更新:第0节中的行数无效。更新后现有节中包含的行数(25)必须等于行数更新前包含在该节中的行数 (25),加上或减去从该节插入或删除的行数(0 插入,1 删除),加上或减去移入或移出该节的行数(0 移入, 0 移出)。'
代码:
// create a cell for each table view row
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
// create a new cell if needed or reuse an old one
let cell:UserCell = self.tableView.dequeueReusableCell(withIdentifier: "tblCell") as! UserCell!
cell.titleLabel.text = self.animals[(indexPath as NSIndexPath).row]
cell.btnDelete.addTarget(self, action:#selector(ViewController.buttonClicked(sender:)), for: UIControlEvents.touchUpInside);
return cell
func buttonClicked(sender:UIButton)
if let superview = sender.superview
if let cell = superview.superview as? UserCell
if let indexPath = self.tableView.indexPath(for: cell)
print("row = ",indexPath.row)
self.tableView.beginUpdates()
self.tableView.deleteRows(at: [indexPath], with: .left)
self.tableView.endUpdates()
self.animals.remove(at:indexPath.row)
我刚刚开始学习 swift,所以请帮助我。
【问题讨论】:
在结束更新之前必须刷新数据源。尝试在self.tableView.endUpdates()
之前调用self.animals.remove(at:indexPath.row)
ios8 Swift: deleteRowsAtIndexPaths crashes的可能重复
@pedrouan "deleteRowsAtIndexPaths" 在 swift 3 中不存在。
【参考方案1】:
尝试将self.animals.remove(at:indexPath.row)
移动到self.tableView.endUpdates()
之前和self.tableView.beginUpdates()
之后,我认为这可能会解决您的问题。
【讨论】:
谢谢。它工作。以上是关于Swift 3.0 无法从 UITableView 中删除一行的主要内容,如果未能解决你的问题,请参考以下文章
UIViewController 内的 UITableView 没有响应(Swift 3.0)
Firebase 与 Swift 3.0 UITableView
iOS / Swift 3.0:如何确定 UITableView 中当前可见的行?