首页 > 解决方案 > Xcode设置标签的文本来自另一个viewController传递的变量导致崩溃

问题描述

这是呈现下一个 VC 的代码:

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    print("dismiss completed")
    let user = self.users[indexPath.row]
    performSegue(withIdentifier: "toNewMessage", sender: self)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let indexPath = tableView.indexPathForSelectedRow

    var vc = segue.destination as! ChatLogController
    vc.user = self.users[(indexPath?.row)!]
}

这就是从之前的 VC 中获取数据的变量:

var user: User? {
    didSet {
        print(user?.name)
        chatLogTitleLabel.text = user?.name
    }
}

它说当我尝试设置标签的文本时它找到了一个 nil 值,但是当我打印它时它是正确的值,而不是 nil。我该如何解决?

标签: swiftxcodeuitableview

解决方案


正如其他人所说,发生这种情况是因为尚未加载视图和所有出口。您可以通过在 viewDidLoad 中设置标签文本来解决此问题,或者您可以在 didSet 中加载视图(如果尚未加载),如下所示:

var user: User? {
    didSet {
        loadViewIfNeeded()
        chatLogTitleLabel.text = user?.name
    }
}

推荐阅读