目前,我正在从事一个项目, 使用
访问单元格的项目dataSource.cellForRowAtIndexPath(indexPath)
但是我习惯用
访问单元格cellForRow(at: indexPath)
有人知道其中的区别吗?使用哪个更好?我问的原因是dataSource.cellForRowAtIndexPath(indexPath)
导致了我们的崩溃。
***由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'尝试出队 同一索引路径的多个单元格,这是不允许的。如果你 确实需要比表格视图请求的更多单元出队, 使用-dequeueReusableCellWithIdentifier:方法(不带索引 路径)。单元格标识符:CheckTableViewCell,索引路径:{length = 2,path = 1-0}'
答案 0 :(得分:7)
区别是:
dataSource.cellForRowAtIndexPath(indexPath)
cellForRowAtIndexPath
是您的 dataSource 提供给UITableView
的方法。 iOS调用它来加载特定indexPath
的单元格。通过使可重复使用的单元出队并填写该单元的信息来工作。
您通常不打电话。 iOS可以。
cellForRow(at: indexPath)
iOS提供了此方法,以返回特定indexPath
的单元格(如果该单元格当前在屏幕上)或nil
(如果该单元格不在屏幕上)。
如果您有indexPath
并且需要关联的单元格,则可以调用此方法。
您正在发生错误,因为您正在调用cellForRowAtIndexPath
,这会使可重复使用的单元格出队以完成其工作。该单元已经在屏幕上,并且已经有一个与之关联的单元,所以现在有两个,这是没有意义的。
答案 1 :(得分:1)
cellForRow(at: indexPath)
在任何时候,如果要检索TableViewCell,都应该使用它。
dataSource.cellForRowAtIndexPath(indexPath)
这是用于在UITableview中加载单元格,并且是iOS的委托方法。
答案 2 :(得分:0)
要多次使用一个,请使用以下方法。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell =tableView.dequeueReusableCell(withIdentifier: "Your reuse Identifier", for: indexPath) as! YourCell
return cell
}