无效更新:无效的节数

Posted

技术标签:

【中文标题】无效更新:无效的节数【英文标题】:Invalid update: invalid number of sections 【发布时间】:2017-07-23 14:34:53 【问题描述】:

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“。更新后表视图中包含的节数(3)必须等于更新前表视图中包含的节数(3),加上或减去插入或删除的节数(1插入,0已删除)。'

但我根据我错过的数据源插入 1 并删除了一个

    self.states?.append(sortedStates) //Update state  property
    if (self.states?.count)! > 3 
        self.states?.removeFirst()
    
  self.newsFeedTableView.beginUpdates()
  self.newsFeedTableView.insertSections([(self.states?.count)! - 1], with: .none)
  if (self.states?.count)! > 3            
      let statesForoldestStateTime = self.states?.first
      self.newestStateTime = statesForoldestStateTime?.first?.createdAt
      let indexpostion = (self.states?.count)! - 3
     self.newsFeedTableView.deleteSections([indexpostion], with: UITableViewRowAnimation.none)
    
  self.newsFeedTableView.endUpdates()

【问题讨论】:

满足条件才更新。 不相关,但考虑合并您数量惊人的问号。例如,为什么states 是可选的? @vadian 数据从网络加载,这就是声明 var states : [[State]]? 的原因 在大多数情况下,将集合类型声明为空的非可选类型var states = [[State]]() 更合适,尤其是对于数据源数组。 【参考方案1】:

错误说明了一切。当if (self.states?.count)! > 3 为假时。唯一的部分将被插入而不是被删除。 您应该相应地更新您的数据源。节数方法必须返回someArray.count。当您插入某个部分时,请确保更新该数组,当您删除某个部分时,请从某个数组中删除该元素。这将解决问题。

【讨论】:

以上是关于无效更新:无效的节数的主要内容,如果未能解决你的问题,请参考以下文章

UICollection 崩溃无效更新:无效的部分数。

如何从collectionview重新加载部分

插入单元格后出错:节数无效

删除部分中的最后一个单元格后,iOS 应用程序崩溃

NSInternalInconsistencyException 原因:'无效更新:第 0 节中的行数无效'

当我已经更新数据时出现错误“无效更新:无效行数”