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

2017-08-18  本文已影响0人  韩云智VL

问题场景

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

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

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

上一篇 下一篇

猜你喜欢

热点阅读