4

我正在使用由其他人制作的子类 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. 有谁了解引发的异常?

4

2 回答 2

3

在调用 scrollToRowAtIndexPath 之前测试重新加载 tableview。

[self.tableView reloadData];
于 2013-11-03T22:10:07.283 回答
3

正如一些评论者指出的那样,当您尝试滚动到不存在的索引路径时(根据 numberOfSectionsInTableView 和 numberOfRowsInSection 的结果),您会看到此错误。

所以解决方法是不要尝试滚动到不存在的索引路径。您可以通过更改调用此方法的顺序、相对于加载数据(如评论者所建议的那样)或通过其他方式(例如更改计算要滚动到的索引路径或仅滚动的方式)来实现此修复如果索引路径肯定存在,则有条件)。

于 2014-06-03T03:48:44.237 回答