iOS 如何判断TableView已经reloadData完成

最近在收集App测试Bug问题时发现一个问题,就是在执行下面这两句代码是造成了程序闪退:

[self.tableView reloadData];
[self.tableView yg_scrollToRow:0 inSection:0 atScrollPosition:UITableViewScrollPositionNone animated:YES];

闪退信息:

-[UITableView _contentOffsetForScrollingToRowAtIndexPath:atScrollPosition:usingPresentationValues:]: row (0) beyond bounds (0) for section (0).
(null)
很明显是因为[tableView reloadDate]并不会等待tableview更新结束后才返回,而是立即返回,然后去计算表高度,获取cell等。如果表中的数据非常大,在一个run loop周期没执行完,这时,需要tableview视图数据的操作就会出问题了。

有以下两种解决方法:

1.强制刷新
[self.tableView reloadData];
[self.tableView layoutIfNeeded]; // 强制重绘并等待完成
[self.tableView yg_scrollToRow:0 inSection:0 atScrollPosition:UITableViewScrollPositionNone animated:YES];
2.线程等待
[self.tableView reloadData];  
// reloadDate会在主队列执行,而dispatch_get_main_queue会等待机会,直到主队列空闲才执行。
dispatch_async(dispatch_get_main_queue(), ^{  
    //刷新完成  
    [self.tableView yg_scrollToRow:0 inSection:0 atScrollPosition:UITableViewScrollPositionNone animated:YES];
});

参考链接1
参考链接2

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • //联系人:石虎QQ: 1224614774昵称:嗡嘛呢叭咪哄 1.如何追踪app崩溃率,如何解决线上闪退 当iO...
    石虎132阅读 8,732评论 3 23
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,201评论 30 471
  • 突然感觉前所未有的疲惫,恐惧和难受,不知道为什么,莫名地想哭,感觉此时此刻任何一个微小的事物都可以瞬间让我土崩瓦解...
    精致的女流氓阅读 565评论 0 0
  • 图文/无为跑者 白花戚戚不憔悴, 绿藤幽幽藏深闺。 但能昼间一次见, 魂牵深夜不得睡。
    最家游阅读 617评论 49 39
  • 距离2017年执业医师资格考试还有不到一个月的时间,紧张的复习终将迎来检验的时刻,对命题趋势进行了解,对最后的考试...
    6d88a97a0fdc阅读 213评论 0 0