Ios VIEWDIDDDISPEAR后的性能更新是否导致错误?

Ios VIEWDIDDDISPEAR后的性能更新是否导致错误?,ios,uicollectionview,ios9,Ios,Uicollectionview,Ios9,我打电话来 performBatchUpdates({ self.insertItemsAtIndexPaths(indexPathes) }, completion: { _ in }) 在控制器中不可见的集合视图上!已经有另一个视图控制器推到它上面 这将导致以下错误: Invalid update: invalid number of items in section 0

我打电话来

performBatchUpdates({
            self.insertItemsAtIndexPaths(indexPathes)
            },
            completion: {
                _ in
        })
在控制器中不可见的集合视图上!已经有另一个视图控制器推到它上面

这将导致以下错误:

Invalid update: invalid number of items in section 0.  The number of items contained in an existing section after the update (12) must be equal to the number of items contained in that section before the update (12), plus or minus the number of items inserted or deleted from that section (12 inserted, 0 deleted) and plus or minus the number of items moved into or out of that section (0 moved in, 0 moved out).'
但这根本不是真的,因为如果我在视图可见时调用PerformBatChUpdate,它将工作得非常完美

到底发生了什么事

编辑: 请注意,如果我调用reloadData,它可以在视图不可见时正常工作。苹果是怎么说的

如何捕获此异常。这样我就可以用用户重新加载数据了

编辑: 在调用PerformBachUpdate之前,我已打印了以下内容:

print("visibleCells().count :"  + String(self.visibleCells().count))
print("dataModel count:" + String(self.dataArray.count))
以下是我得到的:

visibleCells().count :0
dataModel count:12

这意味着例外情况不是真的

正如@rmaddy在评论中提到的,您的问题是没有正确更新数据模型。
对于
indexpaths
(包含12个索引),可以调用
insertItemsAtIndexPaths
,但数据模型从12个索引开始,在批量更新后以12个索引结束。您只需要在数据模型中插入内容时调用insert(例如,在调用类似于
dataModel.insert(“whatever”,atIndex:0)的内容后)
,您还可以使用索引0调用
insertItemSatinExpaths

这里的情况似乎不是这样,因为最终得到的元素数相同(12)。在这种情况下,如果要刷新集合视图,则需要调用
reloadData
(如果数据没有更改,则不调用任何内容)

reloadData
不会抛出此类异常,因为它不会添加/删除任何内容,它只会获取您在数据源中提供的任何内容
InsertItemSatinExpaths可以设置更改的动画,因此它将进行一些检查,以查看您的数据模型(无论您在数据源中提供什么)是否添加了新元素,否则会引发异常。

捕获异常(使用@try/catch)不会让您走得更远,因为它会使更新处于某种奇怪的状态,从而导致进一步的问题。

您需要更新数据模型以匹配插入到集合视图中的项。@rmaddy感谢您的帮助。在调用insetItemIndexPath之前,我已经更新了数据模型。@rmaddy这很好,但是视图控制器应该是可见的!!仅当视图可见时才应更新它。此时,您将弹出到正在执行此批处理更新的视图控制器。在视图中将出现时尝试这样做。@A谢谢您的回复,我使用了重载数据功能。它起作用了为什么?苹果在文档中提到了吗谢谢你的回答,但事实并非如此。我已经编辑了这个问题。您可以看到数据模型已正确填充
visibleCells
与您的数据模型无关
VisibleCell
将永远是alexi,我很确定这是ios中的一个bug。数据模型和索引路径匹配。无论如何,谢谢你的帮助efforts@david-异常不检查索引,只关心插入和删除了多少项(检查批更新前后的单元格总数)。如果您的集合视图有12个单元格,并且您告诉它插入另一个单元格(在任何索引处),则更新后它将有13个单元格。是的,我知道,但这里不是这样。在插入新项目之前,我已清除集合。我完了。我只是用重新加载的数据替换了它。谢谢