美文网首页
关于TableView刷新后报数组越界的错误原因

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

作者: yangli | 来源:发表于2018-12-13 15:39 被阅读0次

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就不会出错了!

相关文章

网友评论

      本文标题:关于TableView刷新后报数组越界的错误原因

      本文链接:https://www.haomeiwen.com/subject/cxhbhqtx.html