ios swift uitableview swipe-gesture

Bloquee si se desliza para eliminar una celda de UITableView de forma rápida y continua en iOS11



swift swipe-gesture (2)

El problema es como el título. Aquí está mi código. Y me parece que la operación, deslizar de derecha a izquierda para eliminar directamente, es una nueva característica en iOS11

let model = self.customRules.remove(at: indexPath.row) //delete datasource self.dao.delete(model: model) //delete data in database tableView.beginUpdates() //still crash no matter the line exists or not tableView.deleteRows(at: [indexPath], with: .left) //delete cell view tableView.endUpdates()

Este es el registro de bloqueo.

*** Terminating app due to uncaught exception ''NSInternalInconsistencyException'', reason: ''UITableView internal inconsistency: the _swipedIndexPath cannot be nil if the swipe to delete row is being deleted in _updateRowsAtIndexPaths:withUpdateAction:rowAnimation:usingPresentationValues:'' Last Exception Backtrace: 0 CoreFoundation 0x000000018710fd50 <redacted> + 148 1 libobjc.A.dylib 0x0000000186624528 objc_exception_throw + 56 2 CoreFoundation 0x000000018710fc0c <redacted> + 0 3 Foundation 0x0000000187a9bb44 <redacted> + 112 4 UIKit 0x00000001907c52b8 <redacted> + 648 5 UIKit 0x00000001906819e4 <redacted> + 140 ......


Su código parece estar bien, pero ha habido un error en Xcode 9 con la eliminación de celdas. Si intentas tu código en Xcode 8 probablemente funcionará. Comprueba this respuesta para más información.


Trate de usar mi ejemplo.

class ViewController: UIViewController { @IBOutlet weak var tableView: UITableView! var data = ["Byba", "Boba", "Gent", "Xpa", "zc", "123", "swipe", "gen", "sw", "xcas", "kjs", "908"] override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } // MARK: - UITableViewDelegate extension ViewController: UITableViewDelegate { func tableView(_ tableView: UITableView, titleForDeleteConfirmationButtonForRowAt indexPath: IndexPath) -> String? { return "delete" } func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { return true } func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { if editingStyle == .delete { tableView.beginUpdates() data.remove(at: indexPath.row) tableView.deleteRows(at: [indexPath], with: .left) tableView.endUpdates() } } } // MARK: - UITableViewDataSource extension ViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return data.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = UITableViewCell() let item = data[indexPath.row] cell.textLabel?.text = item return cell } }