偶现crash
一、业务场景:列表使用骨架屏,第一页数据加载失败时或无数据时,停止骨架屏动画,偶现crash
二、使用示例:
1、骨架屏配置
2、发起网络请求,触发骨架屏动画
3、请求结束配置modelArr,并停止骨架屏

三、偶发crash信息参考:
UICollectionView和UITableView均有此问题,偶现
四、其他说明: 1、列表数据modelArr使用get懒加载 2、获取第一页时,若数据网络异常会是modelArr = nil;若第一页无数据,及modelArr.count = 0。 3、未使用骨架屏时,刷新列表(UITableView和UICollectionView)均无问题,因为numberOfXXXInSection都会返回0,不会触发cellForXXXAtIndexPath,也不会数组越界crash
五、希望作者分析下该库的健壮性
六、最后:感谢作者分享优异的工具库供大家使用,希望作者越来越好
我在Demo SectionsCollectionViewController类中,将获取数据的数组调整后,也会报相同的错误,示例如下
1、获取数据后,数据依然是空
2、Cell获取该数组对应索引的数据模型
3、Crash

这个问题是数组越界问题,场景是某列表接口返回数组为空数组,该列表应该是无数据状态。 但该库hook交换了代理的方法,某些节点该库依然会调用cellForRowAtIndexPath / cellForItemAtIndexPath,但是此时如果业务方列表中Array为空,Array[indexPath.row]就越界触发Crash了,这不是业务方的问题。
此库这块设计的不太合理,因为没数据时(modelArray.count=0),如果不集成此库,系统本身都不会触发cellForXXXAtIndexPath
目前为了避免此问题,可以在cell赋值时,判断下当前Array.count是否大于IndexPath
如下

但是这种被迫判断的代码很不理想
希望作者整体考量下,看看怎么优化此场景问题,十分感谢~
我也遇到了这个问题
我也遇到相同的问题,看源码是hook里numberOfSections方法,结算骨架动画后状态没有设置成end,导致没有触发被交换的方法
感谢反馈 2.6.6 fixed @tongxiaobo @zhuxiaod @78084367