这两天例行查看UMeng中的统计数据时出现了一个频现的BUG,简直是触目惊心,我的产品竟然能有BUG,简直不能忍,直接贴图吧
首先呢利用dSYM定位到了报错的具体页面,这个问题看字面意思是因为CollectionView的 layout 的布局原因而导致的崩溃
该页面的的布局是一个TableView,Cell中会嵌套一个CollectionView而在实际使用的过程中,当前页面在上拉加载第一到两页时并不会产生崩溃,而在数据加载到第三页之后,就会产生崩溃
[UICollectionView received layout attributes for a cell with an index path that does not exist: <NSIndexPath: 0xc000000000400016> {length = 2, path = 0 - 2}]
打了断点之后会发现,在运行过 numberOfItemsInSection 后, 不会进入到 cellForItemAt 中,而直接产生崩溃.
在上Google搜索了一番之后,在Stack overFlow 上有相应的解决方案,在将 collectionView.collectionViewLayout.invalidateLayout()
添加到 numberOfItemsInSection 的 Return之前,使之前的布局失效,从新进行布局也会修复BUG, 但是我想 numberOfItemsInSection 是一个调动频率较高的方法,将布局失效的代码放置入内会不会不合理呢.算了,还是自己动脑子想想其他方法吧.既然已经大概找到问题的方向,解决 BUG 应该是没什么问题
我想之前的Layout都可以正常运转,在加载数据后在Layout方面产生了崩溃,那么问题应该出现在 reloadData 这里.
最后检查代码发现,在进行数据加载时判断是否显示collectionView时,我将reloadData放置在了判断的内部进行的,也就是说如果加载到的数据为不显示collectionView,那么从缓存池中取出的item布局就会与数据源不符,并且没有更新布局, 就会产生闪退报错的情况.
好吧...说来说去这个疑难杂症是解决了,原来是我的一个小失误... 我的锅,还想了这老半天的BUG,有什么办法....怪我咯?
我也很绝望啊!!!
这一个小时够我看一集人民的名义了啊!!!