我有一个UITableView
显示来自多个 RSS 提要的帖子的聚合提要。UITableView
每当我的应用程序从提要中提取新帖子时,我都会创建一个对象,该对象表示更新当前行所需的所有插入和删除。我将这些对象放入一个数组中,用作 FIFO 队列。每隔几秒钟,我就会从这个数组中拉出第一个元素,并尝试在UITableView
using 函数中执行所有的插入和删除UITableView:performBatchUpdates
。
这一切都很好......只要用户不上下滚动UITableView
。如果滚动正在进行,更新将停止,因为我设置了一个标志,以确保我总是等到最后一组插入/删除完成后再开始下一批,遗憾的是,有时,完成关闭UITableView:performBatchUpdates
永远不会被调用,因此我的标志永远不会被清除。
这是我用来处理传入更改队列的代码UITableView
:
@objc func updateFeedPostsTableView() {
guard feedUpdateQueue.count > 0,
!feedTableUpdateInProgress else { return }
feedTableUpdateInProgress = true
let feedUpdate = feedUpdateQueue.first!
feedUpdateQueue.remove(at: 0)
self.aggregatedRSSFeed = feedUpdate.feed
self.feedPostsTableView.performBatchUpdates ({
self.feedPostsTableView.deleteRows(at: feedUpdate.indexPathsOfDeletedPosts,
with: .fade)
self.feedPostsTableView.insertRows(at: feedUpdate.indexPathsOfNewPosts,
with: .top)
},
completion: { (success) in
self.feedTableUpdateInProgress = false
}
)
}
我的问题是,为什么UITableView.performBatchUpdates
不能调用它的完成块?我在这里做错了什么?
这是 iOS 11.2,使用 Xcode 版本 9.2。
谢谢!