之间的区别:tableView.cellForRow和dataSource.cellForRowAtIndexPath

时间:2018-07-04 09:13:59

标签: ios swift uikit tableview

目前,我正在从事一个项目, 使用

访问单元格的项目
dataSource.cellForRowAtIndexPath(indexPath)

但是我习惯用

访问单元格
cellForRow(at: indexPath)

有人知道其中的区别吗?使用哪个更好?我问的原因是dataSource.cellForRowAtIndexPath(indexPath)导致了我们的崩溃。

  

***由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'尝试出队   同一索引路径的多个单元格,这是不允许的。如果你   确实需要比表格视图请求的更多单元出队,   使用-dequeueReusableCellWithIdentifier:方法(不带索引   路径)。单元格标识符:CheckTableViewCell,索引路径:{length = 2,path = 1-0}'

3 个答案:

答案 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
    }