区别:tableView.cellForRow和dataSource.cellForRowAtIndexPath

God*_*ike 2 uikit tableview ios swift

目前我正在开发一个项目,启动该项目的开发人员曾经使用过访问单元格

dataSource.cellForRowAtIndexPath(indexPath)
Run Code Online (Sandbox Code Playgroud)

但我习惯用来访问细胞

cellForRow(at: indexPath)
Run Code Online (Sandbox Code Playgroud)

有谁知道差异,哪个更好用?我问的原因是dataSource.cellForRowAtIndexPath(indexPath)导致我们崩溃的原因.

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

vac*_*ama 7

区别在于:

dataSource.cellForRowAtIndexPath(indexPath)
Run Code Online (Sandbox Code Playgroud)

cellForRowAtIndexPath是您的dataSource提供给的方法UITableView.iOS调用它来加载特定的单元格indexPath.它的工作原理是将可重复使用的单元格出列并填写该单元格的信息.

你通常不会这称呼它.iOS确实如此.

cellForRow(at: indexPath)
Run Code Online (Sandbox Code Playgroud)

indexPath如果该单元格当前在屏幕上,或者nil该单元格不在屏幕上,则iOS提供此方法以返回特定单元格.

如果您有一个indexPath并且需要关联的单元格,则此方法可供您调用.


您的错误正在发生,因为您正在调用cellForRowAtIndexPath哪个对可重用单元格进行排队以执行其工作.单元格已经在屏幕上,并且已经有一个与之关联的单元格,所以现在有两个,这没有任何意义.