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] のデータセットを使用してサブビューに 2 回目に入ると、アプリはこのエラーをスローします。

これは、エラーが発生するコードです。subview.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];
}

: 実際に遅延時間を指定する必要はありません。これら 2 つの手法により、次の実行ループの開始時にメソッドが強制的に呼び出されます。

于 2012-05-25T18:13:28.667 に答える