私のアプリケーションでは、UITableView動的な数の行があります。ユーザーがセルをクリックすると、アプリケーションは別のセルに移動しUIView、ユーザーは [戻る] ボタンをクリックして に移動できますUITableView。戻るときに、選択したセルを強調表示し、セルを中央にスクロールしたかったのです。これが私がそれを達成する方法です
-(void) tableView:(UITableView *)tableView 
  willDisplayCell:(UITableViewCell *)cell 
forRowAtIndexPath:(NSIndexPath *)indexPath {
      if (!isScrollerSet && self.selectedRowNo!=-1) {
            NSIndexPath *indexPath = [NSIndexPath indexPathForRow:self.selectedRowNo 
                                                        inSection:0];
            [self.tableViewP selectRowAtIndexPath:indexPath 
                                         animated:YES
                                   scrollPosition:UITableViewScrollPositionMiddle];
            isScrollerSet = YES;       
      }
}
ユーザーが戻ってきたときに、行が再び表示されたときにこのメソッドが呼び出されます。メソッドで正しい行番号を設定しましたdidSelectRowAtIndexPath:。
UITableViewの行数が少ない場合、これは正常に機能します。UITableVIew100 行あり、ユーザーが 90 行をクリックしたとします。彼が戻ってきたとき、メソッドを呼び出すときにアプリケーションがクラッシュしましたdidSelectRowAtIndexPath:。例外は次のとおりです
*** Terminating app due to uncaught exception 'NSRangeException', 
    reason: '*** -[__NSArrayM objectAtIndex:]: index 3 beyond bounds 
    for empty array'
次に、このコードを に移動しますviewDidAppear:。これで、任意の数の行で動作します。なぜこれが起こるのかわかりません。誰かが理由を説明できますか?