iOS频繁下拉刷新,tableview reloaddata 报 invalid mode 'kCFRunLoopCommonModes闪退的问题

今天项目遇到一个从来没有遇到的问题(接手别人写的项目),使用MJRfresh,tableview 下拉刷新后不等请求完成再次使劲往下拉(每次下拉刷新会先把数组清空),此时程序crash,控制台显示:invalid mode 'kCFRunLoopCommonModes' provided to CFRunLoopRunSpecific - break on _CFRunLoopError_Run.....,这个crash令人有点摸不着头脑,立马百度Google了一下,找到一条相关的内容,

.runloop 作用的太多 超过其限制(本人出现的问题是 tableView 的 reloadData太多。也就是说在tableView正在帮你绘制视图时,你又连续发了好几个reloadData的请求) 链接:测试 提交审核 下载的各种问题集锦

借鉴强大的网络,借鉴别人的方法


UITableview 调用reloadData刷新tableview的时候,偶尔会出现崩溃的现象。出现这种情况大多数是在动态改变Datasource的同时tableview还处于滚动动的状态。Tableview动态改变Datasource与tablewview 调用reloadData方法之间存在时间差,如果此时tableview处于滑动状态,有可能会导致Datasoure下标越界造成Cash.解决办法就是将动态改变datasource和调用reloadData方法同时放在主线程里去处理,先改变datasource立即调用reloaddata。


dispatch_async(dispatch_get_main_queue(), ^{


self.dataSourceArray= a new Array.


[self.tableView reloadData];


});




然而 同样crash

继续运行复现crash,发现第一步crash到tableview的DataSource 方法cellforRow中,通过indexPath.row 从数据源中取model哪一行代码,由此推测是数组越界,果然 在控制台 po一下数组count 为,所以进行了代码约束,通过测试未在出现crash


-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath


{


    InvitationListModal*modal;


    if (self.invitationDataArray.count > 0) {


        modal=self.invitationDataArray[indexPath.row];


    }


//    InvitationListModal*modal=self.invitationDataArray[indexPath.row];//程序第一次crash到这里


    if([modal.newsPicTypeisEqualToString:@"2"]) {


        InvitationImageTableViewCell*cell=[tableView dequeueReusableCellWithIdentifier:InvitationSubImageCellString forIndexPath:indexPath];


        cell.selectionStyle=UITableViewCellSelectionStyleNone;


        cell.backgroundColor=[UIColorwhiteColor];


        if(modal) {


            cell.modal=modal;


        }


        returncell;


    }


    else


    {


        InvitationTextTableViewCell*cell=[tableView dequeueReusableCellWithIdentifier:InvitationSubTextCellString forIndexPath:indexPath];


        cell.selectionStyle=UITableViewCellSelectionStyleNone;


        cell.backgroundColor=[UIColorwhiteColor];


        if(modal) {


            cell.modal=modal;


        }


        returncell;


    }


}


但是感觉还是哪里不对, 如果是数组越界,应该是报数组越界的错,而invalid mode 'kCFRunLoopCommonModes' provided to CFRunLoopRunSpecific - break on _CFRunLoopError_Run.....这个崩溃日志,还是摸不着头脑

如果了解相关内容, 请留言告知,不胜感激

你可能感兴趣的:(iOS频繁下拉刷新,tableview reloaddata 报 invalid mode 'kCFRunLoopCommonModes闪退的问题)