我正在开发的应用程序存在一个不稳定的问题.我有一个在表视图中显示的轨道数组.在此表格视图中,用户可以向左滑动单个曲目,并显示包含三个项目的菜单.其中一个是删除操作.通过这个动作我遇到了问题.
该菜单在UITableViewDelegate方法中实现:
override func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]?
Run Code Online (Sandbox Code Playgroud)
我使用以下语句检索所选行:
selectedTrack = indexPath.row
Run Code Online (Sandbox Code Playgroud)
然后我使用此代码段进行删除操作:
//Delete the selected track
let deleteAction = UITableViewRowAction(style: .default, title: deleteTitle) { (action, indexPath) -> Void in
if self.savedTracks.count > 0 {
self.newTrack = self.savedTracks[self.selectedTrack]
let albumName = (self.newTrack?.trackName)! + String(describing: (self.newTrack?.trackDate)!)
self.savedTracks.remove(at: self.selectedTrack)
self.trackOverviewTable.deleteRows(at: [indexPath], with: .fade)
self.photoStore.deleteAlbumFromDeletedTrack(with: albumName)
self.trackOverviewTable.reloadData()
self.saveTracksToDisk()
} else {
self.trackOverviewTable.reloadData()
}
Run Code Online (Sandbox Code Playgroud)
该程序运行正常,但如果我一个接一个地删除两行,程序崩溃与注释:libc ++ abi.dylib:终止与NSException类型的未捕获异常.
如果我注释掉(或删除)该行:
self.trackOverviewTable.deleteRows(at: [indexPath], with: .fade)
Run Code Online (Sandbox Code Playgroud)
应用程序运行正常,但删除行的动画消失了.有趣的是,应用程序有时可以使用"deleteRows"功能正常运行,但通常不会.我看过几条评论,但我还没有找到正确的答案.
该表没有部分,因此数据源方法:
numberOfSections(in: UITableView)
Run Code Online (Sandbox Code Playgroud)
没有实施.谁能帮助我朝正确的方向发展?
根据Vadian的建议,我尝试将代码段更改为:
//Delete the …Run Code Online (Sandbox Code Playgroud)