关于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

你可能感兴趣的:(第三方使用,iOS常用小功能)