ios - dequeueReusableCell 什么时候返回 nil?
问题描述
我是 iOS 编程领域的新手,最近我在网上遇到了一些实现的代码示例,例如:
functableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCell(withIdentifier: customCellIdentifier, for: indexPath) as? CustomCell
if (cell == nil) {
cell = CustomCell(style: UITableViewCell.CellStyle.default, reuseIdentifier: customCellIdentifier) asCustomCell
}
...
}
作者试图处理dequeueReusableCell
返回 nil 的事件。
但是从我对 UITableView 和自定义单元格的有限个人经验来看,我还没有遇到过dequeueReusableCell
返回 nil 的情况。
通过研究,我发现原因可能是
“出队......方法试图找到一个具有给定重用标识符的单元格,该标识符当前不在屏幕上。如果找到,则返回该单元格,否则返回 nil。”
但这在我身上从来没有发生过一次。当我故意给它一个错误的标识符时,会发生运行时错误,但一次都没有返回 nil。我想知道这到底什么时候会发生,以及是否真的有必要进行处理。
解决方案
该代码不正确。当重用池中没有可用的单元格时(即当表格视图首次出现时) ,dequeueReusableCell
不带indexPath
参数的旧形式返回。nil
在这种情况下,分配一个单元是您的责任。
您的问题中显示的较新形式的dequeueResuableCell
将始终返回一个单元格,因为它会在需要时分配一个单元格。
nil
如果条件向下转换失败(即返回的单元格不是 的实例),则问题中的表达式可以返回CustomCell
。
我认为这代表了某个地方的严重错误配置,应该在开发过程中发现。出于这个原因,通常使用强制向下转换;在开发过程中,您遇到崩溃,解决问题并继续前进。
let cell = tableView.dequeueReusableCell(withIdentifier: customCellIdentifier, for: indexPath) as! CustomCell
您问题中的代码是某种新旧科学怪人的混合体。
推荐阅读
- drop-down-menu - 社交引擎编辑下拉选项
- java - 使用 Java 的 XML 拆分器 - 索引设置与标记的偏移量,省略了开头的空格
- javascript - 在 Mongo 视图中求和和输出总计
- python - 在openCV中删除没有运动的帧
- angular - 使用 Angular2Csv 插件导出到 xls
- python - 关键错误数据透视表熊猫
- json - 如何用 angular 2 重新排列 JSON
- sorting - 带有两位小数的 JavaFX 浮点列
- node.js - 通过 Wiki.js 在 Google App Engine 上使用 mLab(连接超时)
- tfs - TFS 2010 到 2018 迁移到新硬件和域