didSelectRowAtIndexPath返回超出范围的索引

时间:2016-07-22 05:55:00

标签: ios objective-c uitableview

每当我有足够多的项目加载到我的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上搜索了一下,找不到与我类似的问题,我真的不知道如何纠正这个问题,因为这个代码或类似的代码似乎是获取索引值的标准方法选定的行。

1 个答案:

答案 0 :(得分:2)

尝试修改代码

UITableViewCell *cell = [self.tableView.visibleCells objectAtIndex:indexPath.row];

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];