BUG日常 -- tableView 下拉刷新的崩溃

问题场景

当数据刚好占满一屏幕,数据源减少,下拉刷新,会产生崩溃。

bug代码

[tableView.mj_footer endRefreshing];
[tableView.mj_header endRefreshing];
NSArray * array = responseObject[@"data"][@"couponMembers"];
if (array.count == 0) {
    [tableView.mj_footer endRefreshingWithNoMoreData];
}
[tableView reloadData];

问题解析

在调用endRefreshing时,刷新头首期,tableView也会跟着向上滚动,下拉滚动到屏幕外的cell会重新回到屏幕里,此时就会调用cell复用的方法,因为在调用endRefreshing之前数据源已经发生变化,这时再取数据就会数组越界而崩溃。

解决方法

处理起来很简单,只要优先执行[tableView reloadData]

但这样也会造成其他问题,刷新数据不够一屏幕,下拉刷新后mj_footer会以待加载的状态出现,此处为了处理方便,在数据不足时我是在numberOfRowsInSection:方法中判断执行[tableView.mj_footer endRefreshingWithNoMoreData];
所以我这里的处理方式为:

[tableView.mj_footer endRefreshing];
[tableView reloadData];
[tableView.mj_header endRefreshing];
NSArray * array = responseObject[@"data"][@"couponMembers"];
if (array.count == 0) {
    [tableView.mj_footer endRefreshingWithNoMoreData];
}

提醒
问题不难,主要需要合理调用顺序

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,259评论 4 61
  • 长的后的我们需要工作,不说为社会主义做多大的贡献,有什么远的志向与抱负,只为工作。通过工作获得或多或少的收入...
    银杏树之叶阅读 287评论 0 3
  • 爱与不爱,穷人得在金钱上决定,“情种”只生在大富之间。 祥子喜欢小福子,可作为一个车夫,自身都难以过活,何况小福子...
    许你一世情缘阅读 1,241评论 2 2
  • 和他相识于一场聚会,大家在KTV唱歌各种狂吼,唱的人耳膜振动,还有点心烦意乱。 然后,突然低沉的嗓音传入耳朵,感觉...
    陪你走过8年阅读 481评论 3 4
  • 【每日一思】梦想。小时候的梦想是什么?大学时的梦想是什么?现在的呢? 梦想,一直觉得是一个特别有情怀的词语,有梦想...
    暖暖的魔羯麻麻阅读 123评论 0 0