iOS UICollectionView reloadItemsAtIndexPaths: 闪退问题修复
"
错误原因:
列表数据section 和 indexPath.row 组数或个数在动态变化过程中执行局部刷新方法闪退,局部刷新只适合列表数据稳定情况下
第一版改错:
我加了@try @catch, 认为当 try 局部刷新 失败时候 catch 直接 [self.collectionView reloadData]做整体刷新好了
情况是确实避免了闪退,但是 整个页面大部分空白了,基本没有了视图层级,页面可滚,代理方法也不执行了。因此该方案不可行!!!
分析:reloadItemsAtIndexPaths 刷新本质依赖于当前已存在要更新的目标cell , 如果没有情况,就会闪退 . 如果存在, 在tableView/collectionView的内部是先删除该cell,再重新创建一个cell.
真正的解决方案:
(1)获取目标indexPath
(2)预判定是否存在目标cell
(3)存在cell再执行
UICollectionViewCell *cell = [self.collectionView cellForItemAtIndexPath:indexPath]; if (cell) {//这里使用局部刷新前判断是否存在要更新的cell [[self.collectionView reloadItemsAtIndexPaths:@[indexPath]]; } else {//没有cell如有必要刷新可使用不依赖已存在cell 和数据动态变化影响 的整体刷新方案 [self.collectionView reloadData]; }
参考:
https://www.jianshu.com/p/7663bba767c9
https://blog.csdn.net/m0_46479005/article/details/109464408
https://blog.csdn.net/XieYupeng520/article/details/51767469
https://stackoverflow.com/questions/10844306/crash-on-reloadrowsatindexpath-but-not-on-reloaddata
https://segmentfault.com/q/1010000000245170?bd_source_light=4746641
posted on 2022-09-27 11:17 ACM_Someone like you 阅读(1081) 评论(0) 编辑 收藏 举报
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)