UITableView多个insertSections到同一个索引

时间:2016-02-15 07:36:09

标签: 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数组与我想要的完全一样,但是我的应用程序崩溃了,如下所示:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of sections. The number of sections contained in the table view after the update (5) must be equal to the number of sections contained in the table view before the update (0), plus or minus the number of sections inserted or deleted (2 inserted, 0 deleted).'

我已经a little sample project on GitHub通过执行

重新创建了这个问题
numSections += 1
tableView.insertSections(NSIndexSet(index:0), withRowAnimation: .Automatic)

五次(link)其中numSections是部分的数量,并且每个部分的行数总是三个。它再说它我只插入了2个部分,而实际上我插入了5个。

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

2 个答案:

答案 0 :(得分:1)

您插入的部分索引并不重要,只要您显示的数据顺序是由您的数据数组控制的。您应该在不同的索引处插入部分,因此使用numSections变量来控制它。

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

答案 1 :(得分:1)

insertSections将在endUpdates()结束时实际执行。因此,在实际情况中,不会插入这些部分,而是指定部分已经增加。

这会奏效。如果您知道要插入的部分数,请使用此方法

    tableView.beginUpdates()
    numSections += 5
    tableView.insertSections(NSIndexSet(indexesInRange: NSMakeRange(0, 5)), withRowAnimation: .Automatic)
    tableView.endUpdates()

以上代码用于github代码。它可以根据您的实际代码进行更改。不要在循环中或多次调用insertSections()