Swift 3.0无法从UITableView中删除行

时间:2016-09-20 12:24:35

标签: ios swift uitableview swift3

我正在使用Xcode 8和swift 3.

当我尝试从UITableView中删除一行时,我收到断言失败。

  

断言失败 - [UITableView _endCellAnimationsWithContext:],/ BuildRoot / Library / Cache / com.apple.xbs / Source / 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,所以请帮助我。

1 个答案:

答案 0 :(得分:2)

尝试在self.animals.remove(at:indexPath.row)之前和self.tableView.endUpdates()之后移动self.tableView.beginUpdates()我认为这可能会解决您的问题。