今天項目遇到一個從來沒有遇到的問題(接手別人寫的項目),使用MJRfresh,tableview 下拉刷新后不等請求完成再次使勁往下拉(每次下拉刷新會先把數(shù)組清空),此時程序crash,控制臺顯示:invalid mode 'kCFRunLoopCommonModes' provided to CFRunLoopRunSpecific - break on _CFRunLoopError_Run.....,這個crash令人有點摸不著頭腦,立馬百度Google了一下,找到一條相關的內(nèi)容,
.runloop 作用的太多 超過其限制(本人出現(xiàn)的問題是 tableView 的 reloadData太多。也就是說在tableView正在幫你繪制視圖時,你又連續(xù)發(fā)了好幾個reloadData的請求) 鏈接:測試 提交審核 下載的各種問題集錦
借鑒強大的網(wǎng)絡,借鑒別人的方法
UITableview 調(diào)用reloadData刷新tableview的時候,偶爾會出現(xiàn)崩潰的現(xiàn)象。出現(xiàn)這種情況大多數(shù)是在動態(tài)改變Datasource的同時tableview還處于滾動動的狀態(tài)。Tableview動態(tài)改變Datasource與tablewview 調(diào)用reloadData方法之間存在時間差,如果此時tableview處于滑動狀態(tài),有可能會導致Datasoure下標越界造成Cash.解決辦法就是將動態(tài)改變datasource和調(diào)用reloadData方法同時放在主線程里去處理,先改變datasource立即調(diào)用reloaddata。
dispatch_async(dispatch_get_main_queue(), ^{
self.dataSourceArray= a new Array.
[self.tableView reloadData];
});
然而 同樣crash
繼續(xù)運行復現(xiàn)crash,發(fā)現(xiàn)第一步crash到tableview的DataSource 方法cellforRow中,通過indexPath.row 從數(shù)據(jù)源中取model哪一行代碼,由此推測是數(shù)組越界,果然 在控制臺 po一下數(shù)組count 為<nil>,所以進行了代碼約束,通過測試未在出現(xiàn)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;
? ? }
}
但是感覺還是哪里不對, 如果是數(shù)組越界,應該是報數(shù)組越界的錯,而invalid mode 'kCFRunLoopCommonModes' provided to CFRunLoopRunSpecific - break on _CFRunLoopError_Run.....這個崩潰日志,還是摸不著頭腦
如果了解相關內(nèi)容, 請留言告知,不勝感激