我正在使用xib文件创建自定义单元格。重用标识符在 xib 文件中设置。然后我有一个懒惰的var,我只用来注册笔尖一次:
private lazy var registerNib: Bool = {
let nib = UINib(nibName: "CustomTableViewCell", bundle: nil)
self.tableView.register(nib, forCellReuseIdentifier: "Custom")
return true
}()
在单元格创建期间,我只是使用了惰性 var 并从表视图中取消单元格的排队,使用与 xib 文件中相同的重用标识符:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let _ = self.registerNib
let cell = tableView.dequeueReusableCell(withIdentifier: "Custom") as! CustomCell
return cell
}
但是解包失败,应用程序崩溃。
tableView.dequeueReusableCell 返回 nil
出于某种原因....
有两个方法命名为 dequeueReusableCell
。
-
dequeueReusableCell(withIdentifier:)
-
dequeueReusableCell(withIdentifier:for:)
但是解包失败,应用程序崩溃。 tableView.dequeueReusableCell 出于某种原因返回 nil。
您正在使用第一个,并且文档清楚地表明
返回值
具有关联
identifier
或nil
的UITableViewCell
对象(如果可重用单元队列中不存在此类对象(。
您可能希望使用后者。更改行:
let cell = tableView.dequeueReusableCell(withIdentifier: "Custom") as! CustomCell
自:
let cell = tableView.dequeueReusableCell(withIdentifier: "Custom", for: indexPath) as! CustomCell
在这样的方法viewDidLoad():
注册 nib 对象
let nib = UINib(nibName: "CustomTableViewCell", bundle: nil)
tableView.register(nib, forCellReuseIdentifier: "Custom")
另外,您是否在情节提要中设置了单元格重用标识符?