为什么UILabel()返回nil?

时间:2017-09-18 13:58:08

标签: ios swift3 uikit uilabel

查看以下代码。

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

2 个答案:

答案 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()