未调用 iOS 11 UITableView performBatchUpdates 完成关闭

Gre*_*son 5 uitableview ios swift performbatchupdates ios11

我有一个UITableView显示来自多个 RSS 提要的帖子的聚合提要。每当我的应用从提要中提取新帖子时,我都会创建一个对象,表示更新UITableView当前行所需的所有插入和删除操作。我将这些对象放入一个数组中,用作 FIFO 队列。每隔几秒钟,我就会从这个数组中取出第一个元素,并尝试UITableView使用函数执行所有的插入和删除操作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
        }
    )
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么UITableView.performBatchUpdates永远无法调用它的完成块?我在这里做错了什么?

这是 iOS 11.2,使用 Xcode 9.2 版。

谢谢!

小智 8

我遇到了这个问题。主performBatchUpdates块正在执行,但完成块从未被调用。我发现这个问题是由我使用 的子类引起的UITableView。一旦我换回香草,UITableView问题就消失了。

学过的知识。不要子类化UITableView