私のアプリケーションでは、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
の行数が少ない場合、これは正常に機能します。UITableVIew
100 行あり、ユーザーが 90 行をクリックしたとします。彼が戻ってきたとき、メソッドを呼び出すときにアプリケーションがクラッシュしましたdidSelectRowAtIndexPath:
。例外は次のとおりです
*** Terminating app due to uncaught exception 'NSRangeException',
reason: '*** -[__NSArrayM objectAtIndex:]: index 3 beyond bounds
for empty array'
次に、このコードを に移動しますviewDidAppear:
。これで、任意の数の行で動作します。なぜこれが起こるのかわかりません。誰かが理由を説明できますか?