我有一个要在 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/