2016-09-20 3 views
2

Ich verwende Xcode 8 und schnell 3.Swift 3.0 Kann eine Reihe von einem UITableView

Ich erhalte eine Assertionsfehler löschen, wenn ich versuche, eine Zeile aus einer UITableView zu löschen.

Assertionsfehler in - [UITableView _endCellAnimationsWithContext:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3599.5/UITableView.m:1610

App beenden wegen Uncaught-Ausnahme 'NSInternalInconsistencyException', Grund: 'Ungültige Aktualisierung: ungültige Anzahl der Zeilen in Abschnitt 0. Die Anzahl der Zeilen in einem vorhandenen Abschnitt nach der Aktualisierung (25) muss der Anzahl der Zeilen in diesem Abschnitt vor der Aktualisierung entsprechen (25), plus oder minus der Anzahl der Zeilen, die aus diesem Abschnitt eingefügt oder gelöscht wurden (0 eingefügt, 1 gelöscht) und plus oder minus der Anzahl der Zeilen, die in diesen Abschnitt hinein- oder hinausbewegt wurden (0 eingezogen, 0 ausgezogen). '

Code:

// 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) 
       } 
      } 
     } 

} 

Ich habe gerade erst begonnen swift Lernen so mir bitte helfen.

+2

Die Datenquelle muss aktualisiert werden, bevor Sie die Aktualisierungen beenden. Versuchen Sie, 'self.animals.remove (at: indexPath.row)' vor 'self.tableView.endUpdates()' – akdsouza

+0

Mögliche Duplikate von [iOS8 Swift: deleteRowsAtIndexPaths stürzt ab] (http://stackoverflow.com/questions/25588779/ ios8-swift-deleterowsatindexpaths-crashs) – pedrouan

+0

@pedrouan "deleteRowsAtIndexPaths" ist nicht in swift 3. –

Antwort

2

versuchen, self.animals.remove(at:indexPath.row) vor self.tableView.endUpdates() und nach self.tableView.beginUpdates() verschieben Ich denke, das könnte Ihr Problem lösen.

+0

Danke. Es funktioniert. –