0

首先,我将向您展示我遇到的错误,然后我将尝试解释我正在做什么来获得此错误等

2011-11-02 10:17:57.665 code[1327:707] *** Terminating app due to uncaught exception 'NSRangeException', reason: '-[UITableView scrollToRowAtIndexPath:atScrollPosition:animated:]: section (0) beyond bounds (0).'
*** First throw call stack:
(0x31fe88bf 0x31d581e5 0x31fe87b9 0x31fe87db 0x32b6df1f 0x29c9b 0x32ae26b5 0x32b3daf1 0x32afed21 0x32afea71 0x32afe78b 0x32afe4ff 0x32ab581b 0x32abafb9 0x3193aba7 0x3273be8d 0x31fbb2dd 0x31f3e4dd 0x31f3e3a5 0x3204afed 0x32ace743 0x35a1 0x301c)
terminate called throwing an exception(gdb) 

这就是我正在做的事情来得到这个错误。 在此处输入图像描述

每当我第二次使用 indexpath[0,1] 的数据集进入子视图时,应用程序都会抛出此错误。

这是发生错误的代码。子视图.m

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    //Center previously selected cell to center of the screen
    [self.tableView reloadData];
    [self.tableView scrollToRowAtIndexPath:oldCheckedIndexPath atScrollPosition:UITableViewScrollPositionMiddle animated:NO]; //happens on this line
}

这是该错误的输出。 在此处输入图像描述

我应该看什么.. 我真的不知道这有什么好或坏的。真正令人沮丧的是,如果我从主视图或任何其他视图进出 IndexPath [0,0],它工作正常,而且这个应用程序从来没有问题。

我希望有人可以帮助我,或者至少让我知道问题可能出在哪里或在哪里。

4

1 回答 1

0

我在我的项目中遇到了类似的问题,我从数据源中删除对象,然后立即调用[self.tableview reloadData];

我为解决这个问题所做的是调用:

dispatch_after(DISPATCH_TIME_NOW, dispatch_get_main_queue(), ^(void){
                [self.tableView reloadData];
            });

这基本上reloadData会在下一个运行循环中调用。您可以使用performSelector:afterDelay.

所以我的建议是尝试调用:

dispatch_after(DISPATCH_TIME_NOW, dispatch_get_main_queue(), ^(void){
  [self.tableView scrollToRowAtIndexPath:oldCheckedIndexPath atScrollPosition:UITableViewScrollPositionMiddle animated:NO];
}

注意:您实际上不需要指定延迟时间,这两种技术会强制在下一个运行循环开始时调用该方法。

于 2012-05-25T18:13:28.667 回答