optional value can't use titleBar.topItem?.title? Fatal Error, fatal error: unexpectedly found nil while unwrapping an Optional value

optional value can't use titleBar.topItem?.title? Fatal Error, fatal error: unexpectedly found nil while unwrapping an Optional value

我想设置标题,所以我使用了:titleBar.topItem?.title = user!.name,其中titleBar是一个navigationBar。

@IBOutlet weak var titleBar: UINavigationBar!

但它一直给我致命错误;这是我的代码:当我打印 (user!.name) 时,它会给我可选的 ("why"),其中 "why" 是 user!.name 的值。

  var user:User! {
        didSet{
//        titleBar.topItem?.title = user!.name
        print("hhh")
        print("this is the name:",user!.name)
        print("hello")
        print("why???")
        }
    }

即使我尝试在不同的函数中使用 user.name 但在同一个视图控制器文件中,它仍然会给我 nil。

   print("sent to person: ", self.user?.name)

有人可以帮我解决这个问题吗?

您需要先初始化 titleBar,然后才能修改它的内容。由于这是 Storyboard 参考,viewDidLoad 尚未命中。此 @IBOutlet 尚未初始化。

你会想要尝试从 IBOutlet 故事板参考过渡并使用程序化的 AutoLayout(我在下面添加了一个可能看起来像的示例),或者尝试在 didSet 中初始化另一个变量并将其分配给 titleBar。但是在 viewDidLoad 上,这很可能会被覆盖。

// init titlebar
let titleBar: UINavigationBar = {
    var navigationBar = UINavigationBar()
    navigationBar.translatesAutoresizingMaskIntoConstraints = false
    return navigationBar
}()

在此之后,您只需将其添加到您的视图中,并通过 NSLayoutConstraint.activate() 激活约束。希望对您有所帮助。