在我的应用程序中,我有一个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:
. 现在它可以处理任意数量的行。我无法弄清楚为什么会这样。有人可以解释是什么原因吗?