每当我有足够多的项目加载到我的UITableView中时,我可以向下滚动到足以将项目移出屏幕,我实现的didSelectRowAtIndexPath方法代码会吐出一个无效的索引值,导致我的应用程序崩溃。
这是我的方法代码,相当标准的公平:
- (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath{
UITableViewCell *cell = [self.tableView.visibleCells objectAtIndex:indexPath.row];
selImg = cell.imageView.image;
[self next];
}
例如,如果tableView有15行从输入数据源的数据中只有12行将在屏幕上的任何时间显示。根据表格查看0-11的那些元素。如果我向下滚动到其他三行并选择一行,则tableView仍显示它具有元素0-11,但indexPath表示已选择第14行。
抛出以下NSRangeException:
'NSRangeException',原因:'*** - [__ NSArrayI objectAtIndex:]:index 14超出界限[0 .. 11]'
在谷歌和SO上搜索了一下,找不到与我类似的问题,我真的不知道如何纠正这个问题,因为这个代码或类似的代码似乎是获取索引值的标准方法选定的行。
答案 0 :(得分:2)
尝试修改代码
UITableViewCell *cell = [self.tableView.visibleCells objectAtIndex:indexPath.row];
到
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];