ios - UITableView 多个 insertSections 到同一个索引

标签 ios swift uitableview sections

我有一个要在 UITableView 中显示的数据集。我想将所有新数据集作为第 0 节插入。通常,我会得到很多集,然后我想一次将它们推到最上面。这看起来像

tableView.beginUpdates()
repeat {
  data.append(dataProvider.nextDataSet())
  tableView.insertSections(NSIndexSet(index:0), withRowAnimation: .Automatic)
} while dataProvider.hasMoreData
tableView.endUpdates()

虽然我的 data 数组与我想要的完全一样,但我的应用程序崩溃时显示如下内容:

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效更新:无效的部分数。更新后 TableView 中包含的节数 (5) 必须等于更新前 TableView 中包含的节数 (0),加上或减去插入或删除的节数 (2 插入,0删除)。

我做了a little sample project on GitHub通过做重现这个问题

numSections += 1
tableView.insertSections(NSIndexSet(index:0), withRowAnimation: .Automatic)

五次 ( link ),其中 numSections 是节数,每个节的行数始终为三。它再次表示我只插入了 2 个部分,而实际上我插入了 5 个部分。

我在这里误解了什么?为什么 tableView 认为我只给了它 2 个新部分?当然,如果我只给它 2 个部分,它认为我只给了它 1 个。:-I

最佳答案

就显示的数据顺序而言,您插入的部分索引无关紧要,这由您的数据数组控制。您应该在不同的索引处插入节,因此使用 numSections 变量来控制它。

我希望如果您将开始和结束更新移动到循环中,它也会起作用。问题是您不知道 TableView 在内部是如何工作的,据我所知没有记录您看到的问题,但是在与您的基础数据不匹配的索引处插入部分是不合逻辑的。

关于ios - UITableView 多个 insertSections 到同一个索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35403808/

相关文章:

ios - 在自定义 UITableView 中设置委托(delegate)和数据源

ios - 当前动画帧-SKSpriteNode

ios - 隐藏导航栏,但当我转换到上一个 View (弹出)时,它会暂时显示旧的后退按钮。为什么?

ios - Apple Swift 的类型转换义务

swift - 在 Swift 中从 XMPP 获取名册

IOS UIPicker 列表超出 TableView 单元格?

objective-c - 在 UITableView 问题的顶部添加额外的单元格

ios - 如何根据swift 3中静态表格 View 中的文本增加textview大小

ios - Swift 3.0 迁移后 Alamofire 错误 : "Cannot convert value of type ' (URL, HTTPURLResponse)-> (URL )' to expected argument type ' 参数'"?

swift - 过滤数组数组时扫描所有/特定数组值