2016-09-20 83 views
2

我使用的Xcode 8刪除一行,並迅速3.雨燕3.0無法從一個UITableView

我得到一個斷言失敗時,我嘗試從一個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) 
       } 
      } 
     } 

} 

我剛開始學習迅速,請幫助我。

+2

必須在結束更新之前刷新數據源。嘗試在self.tableView.endUpdates()前調用'self.animals.remove(at:indexPath.row)'' – akdsouza

+0

[iOS8 Swift:deleteRowsAtIndexPaths crashes]可能的重複(http://stackoverflow.com/questions/25588779/ ios8-swift-deleterowsatindexpaths -crashes) – pedrouan

+0

@pedrouan「deleteRowsAtIndexPaths」不存在於swift 3中。 –

回答

2

嘗試移動self.animals.remove(at:indexPath.row)之前self.tableView.endUpdates()self.tableView.beginUpdates()我認爲這可能會解決您的問題。

+0

謝謝。它工作。 –