2016-07-22 90 views
1

每当我有足够的项目加载到我的UITableView,我可以向下滚动足够远的项目移出屏幕didSelectRowAtIndexPath方法代码我已经实现吐出一个无效的索引值,崩溃我的应用程序。didSelectRowAtIndexPath返回界限索引

这是我的方法的代码,非常标准公平:

- (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath{ 
    UITableViewCell *cell = [self.tableView.visibleCells objectAtIndex:indexPath.row]; 
    selImg = cell.imageView.image; 

    [self next];  
} 

作为一个例子,如果的tableView具有从输入到数据源只有12将显示在任一个时刻在屏幕上的数据15点的行。根据tableView在0-11这些元素。如果我向下滚动到其他三行并选择一个,tableView仍显示它具有元素0-11,但indexPath表示选择了第14行。

这引发以下NSRangeException:

'NSRangeException',原因: '*** - [__ NSArrayI objectAtIndex:]:索引 14超出范围[0 .. 11]'

在Google和SO上搜索了一下,找不到类似于我的问题,我不知道如何解决此问题,因为此代码或类似的东西似乎是获取某个索引值的标准方法选定的行。

+0

可以显示为乌尔行单元格在indexpath方法 –

回答

2

尝试修改代码

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

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
+0

没错,就是工作。谢谢。是否有其他方法无法工作的原因,或者是否与UITableViews如何缓存“隐藏”单元行有关? – Geowil

+0

'visibleCells'只返回在屏幕上可见的列表,并且它不等于tableView中所有单元格的数量,indexPath.row将等于您的不可见单元格的位置。如果这个权利,你可以标记我的答案。谢谢 – iSashok

+0

会这样做,等待答案锁定时间到期。 – Geowil