iOS开发 - 关于MJRefresh刷新崩溃的问题

MJ刷新框架使用详解

关于MJ,行业内恐怕都听过大名,据博主第一次听说到使用到现在也有四五年的历史了,经历这么长时间,MJ可谓依然是强盛不衰,很多自定义的刷新都是通过MJ扩展出来的,博主这里就不一一解释了。
早在几年前,博主刚刚使用MJ的时候就曾碰到过MJ刷新导致崩溃的问题,但是不怎么在意,实至今日,又再次使用MJ,也遇到了同样的问题,先来看看博主是怎么写的:

    _circleTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight - kNavigationBarHeight) style:UITableViewStyleGrouped];
    _circleTableView.delegate = self;
    _circleTableView.dataSource = self;
    _circleTableView.estimatedRowHeight = 120;
    _circleTableView.rowHeight = UITableViewAutomaticDimension;
    _circleTableView.separatorStyle = UITableViewCellSelectionStyleNone;
    [self.view addSubview:_circleTableView];

    MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
    // 设置自动切换透明度(在导航栏下面自动隐藏)
    header.automaticallyChangeAlpha = YES;
    // 隐藏时间
    header.lastUpdatedTimeLabel.hidden = YES;
    // 设置header
    self.circleTableView.mj_header = header;
    self.circleTableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];


#pragma mark - loadNewData
- (void)loadNewData
{
    _page = 1;
    [_tucaoDataArray removeAllObjects];
    [self requestData];
}
#pragma mark - loadMoreData
- (void)loadMoreData
{
    _page++;
    [self requestData];
}

乍一看似乎并无不妥,很多人也是这么用的,但是恰恰是这种写法使得在刷新的时候导致数组越界的崩溃,原因就是在loadNewData方法中还未请求到数据就删除了数据源,如果在请求途中tableview滚动,数据源没有数据,为空,直接就崩溃了。如果tableview不滚动,也存在一定的几率会崩溃,属于偶发性的。
最好的做法就是在请求到数据后再删除数据,存入新数据,不要提前删除数据。实在是一个低级错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodingFire

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值