我正在使用由其他人制作的子类tableView,它附带了一个方法loadObjects
,它导致tableView重新填充其单元格,但是它不会告诉表视图在重新填充后返回到顶部。我尝试用以下方法实现此功能:
- (void)loadObjects{
[super loadObjects];
[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];
}
但是一旦调用了loadObjects
(当表视图想要最初加载时),我会得到以下异常:
*** Terminating app due to uncaught exception 'NSRangeException', reason:
'-[UITableView _contentOffsetForScrollingToRowAtIndexPath:atScrollPosition:]:
row (0) beyond bounds (0) for section (0).'
我将我写的用于滚动表格视图的行转移到另一个自定义方法,每当我按下一个按钮时调用它,它完全正常,所以我覆盖loadObjects
时出现问题。有人理解抛出的异常吗?
答案 0 :(得分:3)
在调用scrollToRowAtIndexPath之前测试重新加载tableview。
[self.tableView reloadData];
答案 1 :(得分:3)
正如一些评论者指出的那样,当您尝试滚动到不存在的索引路径时(根据numberOfSectionsInTableView和numberOfRowsInSection的结果),您会看到此错误。
所以修复是不要尝试滚动到不存在的索引路径。您可以通过更改调用此方法的顺序,相对于加载数据(如评论者建议的),或通过其他方式(例如,更改计算滚动到的索引路径的方式,或仅滚动)来实现此修复有条件地,如果索引路径肯定存在)。