1

私のアプリケーションでは、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:。これで、任意の数の行で動作します。なぜこれが起こるのかわかりません。誰かが理由を説明できますか?

4

2 に答える 2