当我要求我的表视图滚动到顶部时,为什么会出现NSRangeException?

时间:2013-11-03 22:04:28

标签: ios objective-c uitableview

我正在使用由其他人制作的子类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时出现问题。有人理解抛出的异常吗?

2 个答案:

答案 0 :(得分:3)

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

[self.tableView reloadData];

答案 1 :(得分:3)

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

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