gpt4 book ai didi

ios - `reloadRowsAtIndexPath` 崩溃

转载 作者:行者123 更新时间:2023-11-28 09:04:38 33 4
gpt4 key购买 nike

我有一个分页 tableView,每次用户滚动时都会加载一个新页面,有点像 instagram 提要。 tableView 的重新加载发生在获取新页面后的回调中。代码看起来像这样:

func fetchNewPage() {
ws.fetchNewPage(completion: { () -> Void in {
updateDataSource()
self.tableView.reloadData()
})
}

同时,tableView 中的单元格应在用户点击它们时更新(它们会更改其背景颜色)。这发生在调用 WS 之后。代码看起来像这样:

func markAsSeen(indexPath: NSIndexPath) {
ws.markAsSeen(completion: { () -> Void in {
self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .None)
})
}

我的问题是 dataSource 可以在执行 markAsSeen 完成 block 时更改元素的数量。然后应用程序崩溃并出现此异常:

Fatal Exception: NSInternalInconsistencyException
Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (50) must be equal to the number of rows contained in that section before the update (25), plus or minus the number of rows inserted or deleted from that section (1 inserted, 1 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).

所以,我的问题是,您是否知道如何同步这两个 block ,以便应用程序不再崩溃,但行也会得到更新。

非常感谢

最佳答案

您关于同步的想法是正确的。作为一个选项,您可以在主队列上执行数据源更新。在这种情况下,数据源和 UI 更新将按顺序排队和执行,因为数据的结果更改将是可预测和一致的。

另外值得一提的是,所有 UI 调用都必须在主线程上执行。从您的代码中并不清楚这是真的。

关于ios - `reloadRowsAtIndexPath` 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31132031/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com