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

2018-12-13  本文已影响0人  yangli

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

上一篇 下一篇

猜你喜欢

热点阅读