我的应用程序有两个CollectionViewController
。在给定的时间只有一个可见。
我在 Storyboard 上创建了以下结构:两个容器 View 彼此重叠。每个容器 View 都嵌入了CollectionViewController
。特定容器 View 的可见性确定哪个collectionViewController是可见的。
这就是问题。两个CollectionViewController
都并行接收数据,但是iOS存在一个错误,如果一个CollectionViewController尝试在不可见的情况下尝试使用performBatchUpdates
执行插入操作,则该错误会使应用程序崩溃。
为了防止这种情况,我在两个CollectionViewController
上都创建了BOOL标志,以便他们知道它们是否可见并执行performBatchUpdates
。就像是:
if (self.isThisCollectionViewVisible == NO) return;
[self.collectionView performBatchUpdates:^{
// bla bla... perform insert,m remove...
这解决了部分问题。但是,在以下情况下,该应用程序继续崩溃:如果我点击按钮以切换到不可见的
CollectionViewController
,则在接收更新时使其可见。我的意思是:让我们先将
A
命名为CollectionViewController
,然后将B
命名为第二个。此时A
可见,而B
不可见。 B
开始接收数据并尝试执行performBatchUpdates
,但是由于它不可见,因此if (self.isThisCollectionViewVisible == NO) return;
阻止了performBatchUpdates
运行,这很好。现在,我使A
不可见,使B
可见。此时,将标志self.isThisCollectionViewVisible
设置为YES
,并且performBatchUpdates
使应用程序崩溃,并显示以下错误:我认为
CollectionViewController
确实尚未准备好并已更新为能够执行performBatchUpdates
...,而这不是以前不更新数据源的问题,因为它正在被更新。我可以做些什么检查来防止这种情况发生?
注意:我特别注意到有关此崩溃的一些奇怪信息。它表示当崩溃发生时,将插入5个元素并删除2个元素,但实际上正在插入3个元素,删除0个元素,更改2个元素。
最佳答案
对我来说,添加self.collectionView.numberOfItemsInSection(0)
可以解决崩溃问题。
在不可见的情况下,在插入项目时collectionView出现问题。
似乎我并不孤单:http://www.openradar.me/15262692
关于ios - 如何解决此CollectionView崩溃?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36334228/