我在viewWillAppear方法中使用scrollToRowAtIndexPath时出现EXC_BAD_ACCESS错误。我搜索了解决方案,并看到一些旧帖子建议将委托和表设置为nil(请参阅下面的代码),但是当我设置它时,我根本没有在tableview中加载任何东西。 我应该说这是聊天应用程序的一部分,我想先显示输入的最后一条消息。非常感谢您对此的任何帮助。 这是我的观点WillAppear:
-(void)viewWillAppear:(BOOL)animated {
[self.table reloadData];
int lastRowNumber = [self.table numberOfRowsInSection:0] - 1;
NSIndexPath* ip = [NSIndexPath indexPathForRow:lastRowNumber inSection:0];
//self.table.delegate = nil;
//self.table = nil;
[self.table scrollToRowAtIndexPath:ip atScrollPosition:UITableViewScrollPositionTop animated:YES];
}
我应该补充一点,这个代码似乎在我的程序的其他部分工作正常,我唯一一次得到错误的是在viewWillAppear方法中。
答案 0 :(得分:2)
viewWillAppear:
为时尚早。每Apple Documentation:
在视图控制器视图即将发布之前调用此方法 在配置任何动画之前添加到视图层次结构中 用于显示视图。您可以覆盖此方法以执行自定义 与显示视图相关的任务。例如,您可以使用 此方法可将状态栏的方向或样式更改为 与所呈现视图的方向或样式协调。 如果重写此方法,则必须在您的某个位置调用super 实施
因此,即使未完全设置视图层次结构,也无法添加动画。
答案 1 :(得分:0)
它可能对你有帮助
NSIndexPath * lastIndex =[NSIndexPath indexPathForRow:yourContenetArray.count-1 inSection:0];
[self.yourTableView scrollToRowAtIndexPath:lastIndex atScrollPosition:UITableViewScrollPositionNone animated:YES];
答案 2 :(得分:0)
Write your code in viewDidAppear method.As your table view is loaded
then after you should call the method scrollToRowAtIndexPath . Then
your animation will be performed.And if you want to use in
viewWillAppear , then You can try to reload your tableView and then
write code for scrollToRowAtIndexPath
答案 3 :(得分:0)
您应该使用viewDidLoad
方法进行滚动,如果您的数组计数为0(空数组),则会引发错误。无法滚动到索引为-1
的单元格。