查看以下代码。
class MyViewCell: UICollectionViewCell {
@IBOutlet weak var title: UILabel!
override init(frame: CGRect) {
super.init(frame: frame)
didLoad()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
didLoad()
}
/// Common init code.
func didLoad() {
self.title = UILabel()
self.title.textColor = .white
...
}
}
我的应用在self.title.textColor = .white
崩溃时出现以下错误:
fatal error: unexpectedly found nil while unwrapping an Optional value
知道为什么UILabel()返回nil
?
答案 0 :(得分:3)
您将某些内容直接分配给弱引用,并且此时没有强大的拥有引用,因此立即删除弱引用。然后当您在下一行访问它时,您将遇到一个!
,这会导致您的崩溃。
您需要创建一个局部变量,该变量将标签保留在范围内,直到其他东西保留它为止,例如您将其添加到视图中:
func didLoad() {
let label = UILabel()
// Configure the label...
self.view.addSubview(label)
// A view retains its subviews, so now you can assign to the weak reference
self.title = label
}
但是,如果您的变量确实是故事板中配置的插座,那么您不应该使用编码器在init中填充它,因为它会被故事板为插座保留的任何内容覆盖。
答案 1 :(得分:-1)
确保您的故事板/ xib上已连接您的IBOutlet
你也不需要这一行
self.title = UILabel()