【问题标题】:EXC_BAD_ACCESS error at viewwillappear using scrollToRowAtIndexPath使用 scrollToRowAtIndexPath 时会出现 EXC_BAD_ACCESS 错误
【发布时间】:2016-01-19 22:25:35
【问题描述】:

在 viewWillAppear 方法中使用 scrollToRowAtIndexPath 时出现 EXC_BAD_ACCESS 错误。我搜索了解决方案并看到一些旧帖子建议将委托和表格设置为零(请参见下面的代码),但是当我设置它时,我根本没有在我的表格视图中加载任何内容。 我应该说这是聊天应用程序的一部分,我想在其中显示首先输入的最后一条消息。非常感谢您对此提供的任何帮助。 这是我的观点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 方法。

【问题讨论】:

  • 尝试将动画设置为 NO。
  • 我看不出你的代码有什么问题。我创建了一个演示项目并将您的代码复制到其中。它完美地工作。您的数据源可能有问题。

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


【解决方案1】:

您可能应该使用viewDidLoad 方法进行滚动,如果您的数组计数为0(空数组),它将引发错误。无法滚动到索引 -1 处的单元格。

【讨论】:

    【解决方案2】:
    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
    

    【讨论】:

    • 您好,感谢您的回复,但这并不能清除错误。无论我使用的是 ViewWillAppear 还是 ViewDidAppear,都会出现同样的错误。
    • 嗨,您在重新加载表格视图后尝试过您的代码吗? ?
    • 是的,我在导致错误的代码之前将重新加载到 ViewDidAppear 中,但仍然出现错误。还是您建议将其放在其他地方?
    • 使用 reload tableview 之后只在 viewWillAppear 中为scrollToRowAtIndexPath 编写代码,或者在 viewDidAppear 中编写相同的内容。
    【解决方案3】:

    viewWillAppear: 在视图上做任何动画还为时过早。每Apple Documentation

    这个方法在视图控制器的视图即将到来之前被调用 在配置任何动画之前添加到视图层次结构中 用于显示视图。您可以覆盖此方法以执行自定义 与显示视图相关的任务。例如,您可以使用 此方法将状态栏的方向或样式更改为 与正在呈现的视图的方向或样式相协调。 如果你重写了这个方法,你必须在你的某个地方调用 super 实施。

    因此,即使视图层次结构未完全设置,也无法添加动画。

    【讨论】:

      【解决方案4】:

      也许对你有帮助

      NSIndexPath * lastIndex =[NSIndexPath indexPathForRow:yourContenetArray.count-1 inSection:0];
      
      [self.yourTableView scrollToRowAtIndexPath:lastIndex atScrollPosition:UITableViewScrollPositionNone animated:YES];
      

      【讨论】:

      • 嗨,谢谢,但我仍然收到相同的 EXC_BAD_ACCESS 错误。实际上这段代码在我程序的其他部分确实有效,错误只发生在 viewWillAppear 中。
      猜你喜欢
      • 2018-11-20
      • 2014-05-31
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-08
      相关资源
      最近更新 更多