我在IOS11中使用trailingSwipeActionsConfigurationForRowAt但是当刷卡多次然后应用程序破解。
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let delete = UIContextualAction(style: .normal, title: "Delete") { action, view, completionHandler in
print("Deleting!")
completionHandler(false)
}
delete.backgroundColor = UIColor.red
let config = UISwipeActionsConfiguration(actions: [delete])
config.performsFirstActionWithFullSwipe = false
return config
}
还有一些错误
*** Assertion failure in -[UISwipeActionController swipeHandlerDidBeginSwipe:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3694.4.18/SwipeActions/UISwipeActionController.m:268
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'No occurrence for index path (null)'
TL; DR - 看看你是否在滑动之间对数据进行了某些操作(例如重新加载)。
当我滑动删除一个单元格(让它处于编辑模式 - 删除操作可见)然后尝试刷另一个导致我的应用程序崩溃时,我有类似的问题。在我的情况下,这是因为在这些滑动之间重新加载表数据。
滑动到删除手势会在willBeginEditingRowAtIndexPath
对象上调用didEndEditingRowAtIndexPath
和UITableViewDelegate
方法。在后者我打电话给tableView.reloadData()
。当我滑动删除其他单元格时,我得到didEndEditingRowAtIndexPath
方法调用第一个单元格(也重新加载数据),然后在该系统之后调用另一个单元格的willBeginEditingRowAtIndexPath
,数据不同步,UIKit崩溃。
当我删除了在didEndEditingRowAtIndexPath
方法中重新加载数据的代码时,我的应用程序将不再崩溃:)
我只是使用UIViewController + UITableViewDataSource和UITableViewDelegate组合而不是使用UITableViewController进行滑动问题。