为啥“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 错误?的主要内容,如果未能解决你的问题,请参考以下文章