就我所知,我已经正确地设置了一切(注册和出列)。
'致命错误:隐式展开可选值时意外发现nil:档案....机甲进入细胞.斯威夫特,第18行'
这很奇怪,因为其他做类似事情的UITableViewCells似乎工作得很好--而且在我看来是一样的。
代码失败:
class MechEntryCell: UITableViewCell {
@IBOutlet weak var mechName: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
mechName.text = "Hello" <<<<<<< CRASHES
}
func setDamageOption(_ damageOption: AdditionalDamageOption) {
mechName.font = UIFont.boldSystemFont(ofSize: mechName.font.pointSize)
mechName.text = damageOption.label <<<< WORKS FINE IF ABOVE CRASH REMOVED
}
}
该文件具有一个.xib文件,其中已正确链接了标签:
我也会注册和出列:
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
tableView.register(UINib(nibName: MechEntryCell, bundle: nil), forCellReuseIdentifier: "MechEntryCell")
........
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return tempDamageOptions.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCell(withIdentifier: MechEntryCell.identifier) as? MechEntryCell {
cell.setDamageOption(tempDamageOptions[indexPath.item])
return cell
}
return UITableViewCell()
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
特别说明:当我在tableView(cellforRowAt:)方法中设置标签时,它工作得很好--所以IBOutlet最终会链接。我做错了什么?
2条答案
按热度按时间ee7vknir1#
我只想添加另一个可能很容易/偶然发生在某人身上的例子。在这个例子中,不小心把cell类放在ContentView上,(而不是应该简单地保留为UIView)。在代码中,cell的awakeFromNib被调用了两次。第一次设置了outlet,而在第二次神秘的调用中,outlet为零。
r1wp621o2#
我带着解决方案羞愧地回来了。
在安装过程中,我不小心将根视图的自定义类设置为机甲入口单元的自定义类。删除这个问题就解决了。