关于TableView刷新后报数组越界的错误原因

bugly报错:

 *** -[__NSArrayM objectAtIndex:]: index 3 beyond bounds [0 .. 0]
JiafeigouIOS -[MessageNewViewController tableView:cellForRowAtIndexPath:]

执行的代码:

1. [self.dataArray removeObjectsInArray:delArray];
2. self.tbView.height = kheight - SafeAreaTopHeight - 44;
3. [self.tbView reloadData];

原因:
第二行代码是导致崩溃的原因。
当我先设置self.tbView.height的时,tableview要移动。由于要滚动,有新的行要显示到窗口,所以将首先调用

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

这个方法。在这个方法里有语句

 [self.dataArray objectAtIndex:indexPath.row];

而第一行代码对数据进行了删除操作,所以可能就会出现数组越界,导致崩溃。

解决:

1. [self.dataArray removeObjectsInArray:delArray];
2. [self.tbView reloadData];
3. self.tbView.height = kheight - SafeAreaTopHeight - 44;

先执行reloadData方法,接下来会先更新数据源,也就是先执行numberOfRowsInSection这些方法。这样,tableview已经知道它要显示的行数,然后再执行cellForRow就不会出错了!

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

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,142评论 1 32
  • 一、简介 <<UITableView(或简单地说,表视图)的一个实例是用于显示和编辑分层列出的信息的一种手段 <<...
    无邪8阅读 10,691评论 3 3
  • 概述在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,类似...
    liudhkk阅读 9,090评论 3 38
  • 马上就要到元旦了,2017年即将向我们告别。回头看这即将过完的2017年,虽然感觉过的很平凡,但总体来说还比较顺利...
    阿超双螺旋阅读 261评论 4 0
  • 1.本周我学习到了连读,听力过程中会有许多句子连读,所以读起来很快,练习听力过程中也要反复听。 2.grippin...
    旅管一班34卫晓欢阅读 283评论 1 0