使用MJRefresh下拉发生的崩溃问题分析

945 阅读1分钟

用MJRefresh进行下拉刷新时,会发生意想不到的崩溃问题

问题主要是分析数组越界的两个问题

数组越界 'index 0 beyond bounds for empty array'看字面意思就知道了.

问题1 先清空了数据,再刷新的问题

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

问题2 在处理数据上面的问题

       当你处理的数据是在网络数据成功的回调里面时, 也发生了崩溃怎么办?原因很简单,就是分为这3个步骤:
       1.dataArray.removeallobjects
       2.判断mj.header和mj_footer 是否isRefreshing,->返回一个bool值,然后如果if(isRefreshing) endRefresing即可.根据需要resetNoMoreData还是endRefreshingWithNoMoreData.
       3.dataArray.addobjecs->reload即可.
       备注:千万不要reset之后再执行endRefresing..