【发布时间】:2020-08-14 16:16:46
【问题描述】:
我有一个最喜欢的电影列表。在表格单元格中,有一个用于从收藏夹列表中删除电影的按钮。所以我想用tableView.deleteRows 为它制作动画。但是,如果我从屏幕顶部删除一行,其他行会向上。这是正常的,但是当我从屏幕顶部删除行时,列表中已经显示的其他单元格没有更新 indexPath。我为 tableView.reloadData 分配了一个 asyncAfter 方法来解决问题,但我认为这可能会导致操作系统方面的崩溃。因为我在延迟后强制主线程重新加载数据。操作系统真的有问题吗?我该怎么办?
示例问题:
如果我删除索引为 0 的电影,所有电影都会向上播放。所以在删除之前,1 个索引电影应该有 0 个索引,但它没有。如果我试图删除一个新的 0 索引电影,它正在删除另一部电影。
Work example without tableView.reloadData()
这是我的代码 // 这是可行的,但我认为 asyncAfter 是个问题
cell.deleteButtonActionBlock = {
FavouritesHandler.shared.deleteMovie(movie)
self.tableView.deleteRows(at: [indexPath], with: .automatic)
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
self.tableView.reloadData()
}
}
【问题讨论】:
-
你是在删除
tableView.deleteRows之前的数据源数组中的项目吗? -
@Jithin 是 FavouritesHandler.shared.deleteMovie(movie) 从数组中删除电影
-
我猜你捕获索引路径的方式有问题。
-
@vadian this sn-p in tableView cellForRowAt indexPath 我不这么认为
-
我愿意,这正是问题所在。请看我的回答。
标签: swift uitableview asynchronous