iOS开发之下拉崩溃"index ? beyond bounds for empty array"

前提:(UITableView和UICollectionView等列表控制器刷新),使用MJRefresh第三方框架

A.首先,我们来先理清逻辑:
  1. 下拉动作;
  2. 达到下拉临界值之后,再请求网络数据;
  3. 待数据加载完成拿到本地以后,才去更新 data source(数据源);
B.测试:

1.先小幅度下拉刷新,正常
2.大幅度下拉刷新,偶尔出现奔溃,App闪退,打印提示:"index 5 beyond bounds for empty array"之类

C.原因:

当下拉tableview时,当超过一定距离时,最下方的cell肯定会超出tableview显示范围,然后在下拉弹回时,会调用- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法。
如果在下拉动作中将arr清空,那么在tableview弹回调用此方法时,cell需要从arr中取值,此时会崩溃。
所以有人说下拉距离短不会崩溃,距离长会崩溃,就是由这个问题引起的。所以才需要在request finished中才清空数组重新赋值,而不是下拉动作中清空。

D.解决:

1.最简单暴力的方式就是:清空数据,立马reloadData (不推介)
2.网络请求成功之后再清空数据源,然后再给数据源赋值,再去reload.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,758评论 4 61
  • 1.badgeVaule气泡提示 2.git终端命令方法> pwd查看全部 >cd>ls >之后桌面找到文件夹内容...
    i得深刻方得S阅读 10,285评论 1 9
  • Swift版本点击这里欢迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh阅读 25,742评论 7 249
  • 有一个姑娘, 身材有点胖, 大众化的长相。 她对人热心肠, 当别人需要帮忙, 她总是慷慨解囊。 而对于别人的诽谤,...
    李尚嵘阅读 1,418评论 0 1
  • 我穿布衣步上苍山 搜集清晨的露水 赠与葛莎雀吉 感谢慈母的吟唱 长措湖静如碧玉 一夜繁星守护 我默念古老的字句 向...
    jean_en阅读 4,400评论 0 2

友情链接更多精彩内容