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

Posted

技术标签:

【中文标题】为啥“tableview.cellForRowAtIndexPath(indexPath)”给我一个 BAD_ACCESS 错误?【英文标题】:Why "tableview.cellForRowAtIndexPath(indexPath)" give me a BAD_ACCESS error?为什么“tableview.cellForRowAtIndexPath(indexPath)”给我一个 BAD_ACCESS 错误? 【发布时间】:2016-03-11 03:05:25 【问题描述】:

我尝试使用此方法获取该 indexPath 的单元格,但出现此“EXC_BAD_ACCESS”错误。 但是如果我使用self.tableView(tableView, cellForRowAtIndexPath:indexPath),它就可以正常工作。

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

【问题讨论】:

可能重复:EXEC_BAD_ACCESS in UITableView cellForRowAtIndexPath 你想从单元格中得到什么信息?我们知道这种方法行不通。但是,如果您提供更多信息,有人可能会为您提供另一种方法。 【参考方案1】:

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

This SO 答案表明在heightForRowAtIndexPath 内调用cellForRowAtIndexPath 会递归调用自身。这就是您收到错误的原因。

【讨论】:

【参考方案2】:

该单元格可能还不存在。考虑到 tableview 可能会要求高度,以便它可以构造单元格。因此,您要在它存在之前要求一个单元格。我必须进行测试才能确定。

UITableViewDelegate - tableView:heightForRowAtIndexPath: 向代理询问指定位置的行的高度。

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

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

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

【讨论】:

【参考方案3】:

这两种方法是完全不同的,一种是给用户的,一种是给table view的delegate的

【讨论】:

以上是关于为啥“tableview.cellForRowAtIndexPath(indexPath)”给我一个 BAD_ACCESS 错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用不可重复使用的表格视图单元格?

从字典数组 Swift 中填充 UITableView

Swift检查滚动表视图的方式[重复]

你应该同步运行方法吗?为啥或者为啥不?

为啥使用 glTranslatef?为啥不直接更改渲染坐标?

为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?