You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS UITableView调用insertRows报Invalid update不一致错误如何解决

崩溃根因

UITableView执行更新操作时会校验数据变动和UI操作的一致性,本次报错的触发逻辑是:

  • 执行更新前section 0的行数为0,你调用append(contentsOf: nComList)后posts数组长度变为10,对应section 0的行数更新后应为10
  • 你仅调用insertRows插入了1行,系统校验时0+1=1与实际行数10不匹配,触发一致性校验异常崩溃。
修复代码

批量生成本次新增数据对应的IndexPath数组,执行批量插入,同时确保UI操作在主线程执行:

var posts: [CommunityListRM.CommunityList] = []

NetworkService().request(.communityList, params, header) { [self] (response: DataResponse<CommunityListRM,AFError>) in
    switch response.result {
    case .success(let data):
        guard let nComList = data.communityList, !nComList.isEmpty else { return }
        let originalCount = self.posts.count
        self.posts.append(contentsOf: nComList)
        // 生成所有新增行的IndexPath
        let indexPaths = (originalCount..<self.posts.count).map { IndexPath(row: $0, section: 0) }
        // 切主线程执行UI更新
        DispatchQueue.main.async {
            self.tableview.beginUpdates()
            self.tableview.insertRows(at: indexPaths, with: .none)
            self.tableview.endUpdates()
        }
    case .failure(let error):
        // 自定义错误处理逻辑
        print(error)
    }
}
额外注意事项
  • 需确保tableView(_:numberOfRowsInSection:)代理方法返回值为posts.count,不可写死固定值
  • 如果是下拉刷新替换全量数据的场景,无需使用insertRows,直接更新posts数组后调用tableView.reloadData()即可
  • 上拉加载更多的场景可复用上述批量插入逻辑

内容的提问来源于stack exchange,提问作者JJHA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 19:54:01