使用scrollToRowAtIndexPath在viewwillappear上出现EXC_BAD_ACCESS错误

时间:2015-10-21 03:45:30

标签: objective-c tableview exc-bad-access viewwillappear

我在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方法中。

4 个答案:

答案 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的单元格。