美文网首页
BUG日常 -- tableView 下拉刷新的崩溃

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

作者: 韩云智VL | 来源:发表于2017-08-18 14:05 被阅读0次

问题场景

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

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];
}

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

相关文章

网友评论

      本文标题:BUG日常 -- tableView 下拉刷新的崩溃

      本文链接:https://www.haomeiwen.com/subject/yhharxtx.html