swift - 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。我该如何解决?
解决方案
正如其他人所说,发生这种情况是因为尚未加载视图和所有出口。您可以通过在 viewDidLoad 中设置标签文本来解决此问题,或者您可以在 didSet 中加载视图(如果尚未加载),如下所示:
var user: User? {
didSet {
loadViewIfNeeded()
chatLogTitleLabel.text = user?.name
}
}
推荐阅读
- django - 从 1.11 升级到 2.0 后 Django wsgi 错误(load_middleware: reversed() 的参数必须是一个序列)
- r - R匹配字符串模式中矩阵运算的向量化
- symfony - [Symfony 3][Sonata Admin] setTemplate 问题
- python - 如何增加 Jupyter 笔记本单元格和文本的大小?
- visual-studio-code - 使用 VSCode 扩展包含运行时类型定义
- ruby-on-rails - Windows 的 rubyracer 插件安装问题
- javascript - 如何在悬停时更改多个图像的列表
- android - 使用 androidx.preference.PreferenceScreen 和 PreferenceScreen 的区别
- cookies - 在 Angular 6 应用程序中从服务器返回的标头中看不到 cookie,但可以在 Postman 中看到它
- perl - Parallel::ForkManager 需要太多时间来启动“完成”功能