为什么" tableview.cellForRowAtIndexPath(indexPath)"给我一个BAD_ACCESS错误?

时间:2016-03-11 03:05:26

标签: ios swift uitableview swift2

enter image description here

我尝试使用此方法获取indexPath的单元格,但我得到了这个" EXC_BAD_ACCESS"错误。 但是,如果我使用self.tableView(tableView, cellForRowAtIndexPath:indexPath),它可以正常工作。

我很困惑这两种方法之间的区别是什么?

3 个答案:

答案 0 :(得分:1)

使用self.tableView(tableView, cellForRowAtIndexPath:indexPath)代码是您的View Controller,它出列了一个合适的新单元格。然而,如果单元格不可见,则表视图上的cellForRowAtIndexPath方法返回nil。由于heightForRowAtIndexPath正在尝试确定哪些行是可见的,因此它不起作用就不足为奇了。

This所以答案显示在cellForRowAtIndexPath内调用heightForRowAtIndexPath递归调用自身。这就是你收到错误的原因。

答案 1 :(得分:1)

细胞可能尚不存在。考虑到tableview可能要求高度,以便它可以构建单元格。因此,您需要一个单元格才能存在。我必须进行测试才能确定。

UITableViewDelegate - tableView:heightForRowAtIndexPath: 询问代表在指定位置使用行的高度。

对于此功能,您应该返回该单元格所需的高度。

UITableViewDataSource - tableView:cellForRowAtIndexPath:  (必需) 要求单元格的数据源插入表视图的特定位置。

UITableView - cellForRowAtIndexPath: 返回指定索引路径的表格单元格。

答案 2 :(得分:0)

这两种方法完全不同,一种是针对用户,一种是针对表格视图的委托