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

在这里输入图像说明

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

我很困惑这两种方法有什么区别?

使用self.tableView(tableView, cellForRowAtIndexPath:indexPath)是代码是你的视图控制器,它出列一个合适的新单元格。 而如果单元格不可见,则表视图上的cellForRowAtIndexPath方法返回nil。 因为heightForRowAtIndexPath试图找出哪些行是可见的,所以它不起作用也就不足为奇了。

这个 SO答案显示调用heightForRowAtIndexPath cellForRowAtIndexPathrecursion调用自己。 这就是为什么你得到错误。

细胞可能还不存在。 考虑到tableview可能会要求高度,以便它可以构造单元格。 因此,你要求一个单元格存在之前。 我将不得不运行一个testing来确定。

UITableViewDelegate – tableView:heightForRowAtIndexPath:询问委托的高度以用于指定位置的行。

对于这个函数,你应该返回你想要的那个单元格的高度。

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

UITableView – cellForRowAtIndexPath:返回指定索引path的表格单元格。

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