关于MJRefresh下拉刷新崩溃问题及解决办法

问题:


  • 在开始进入tableview的时候,调用一个网络请求方法,请求数据,然后数据加载正常,但是一但下拉刷新,就会崩溃,提示index 7 beyond bounds for empty array,但是下拉刷新的方法里无非就是重新调用下网络请求数据的方法,跟第一次进入tableview时请求数据的方法是一样的,为什么会崩溃呢?并且崩溃的地方还是在刚刚链接服务器的时候,都不是把数据请求下来装在数组之后。请问,这个是什么原因?

  • 还有的是下拉距离短刷新没事,下拉距离长就会崩溃。

  • 也有随机出现下拉刷新崩溃的

  • 之前问过MJ也是说数据处理方面存在问题

问题解疑:


下拉刷新逻辑应该是这样的:

  • 1 . 下拉

  • 2 . 达到下拉临界值以后再请求网络数据

  • 3 . 待数据加载到本地以后才更新 data source

  • 4 . reload tableview

PS:如果先清空再下拉,后果就是往下拉的距离超过一个 cell 的高度时,table view 的几个委托方法就会被调用,由于 data source 已经被清空,造成错误的内存访问(包括数组越界,访问已销毁的对象)导致 crash

解决办法参考:


当下拉tableview时,当超过一定距离时,最下方的cell肯定会超出tableview显示范围,然后在下拉弹回时,会调用- (UITableViewCell )tableView:(UITableView )tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath ;

  • 方法一:

    • 如果在下拉动作中将arr清空,那么在tableview弹回调用此方法时,cell需要从arr中取值,此时会崩溃。前面有朋友说下拉距离短不回崩溃,距离长会崩溃,就是由这个问题引起的。所以才需要在request finished中才清空数组重新赋值,而不是下拉动作中清空。
  • 方法二:

    • 最简单暴力的方式就是: 清空数据,立马reloadData 赋值完,在relatedData 。当然这么做讲道理不符合逻辑,但是简单 !

参考自:http://www.cocoachina.com

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值