viewDidLoad 上的 super 引用错误
Posted
技术标签:
【中文标题】viewDidLoad 上的 super 引用错误【英文标题】:Wrong reference of super on viewDidLoad 【发布时间】:2019-09-28 21:42:38 【问题描述】:我需要从第一个控制器实例化第二个控制器。 如图所示,初始化在按钮中开始。
代码和视图以编程方式添加。 加载从一个按钮开始
在故事板文件中,视图未连接
第一个控制器,调用者
let vc = storyboard?.instantiateViewController(withIdentifier: "vcID") as? SecondController
self.navigationController?.pushViewController(vc!, animated: true)
第二个控制器,被调用
override func viewDidLoad()
super.viewDidLoad()
// Barra di navigazione
self.navigationController?.isNavigationBarHidden = false
self.navigationItem.largeTitleDisplayMode = .never
self.navigationItem.title = "Title here"
let attrs = [
NSAttributedString.Key.foregroundColor: UIColor.blue,
NSAttributedString.Key.font: UIFont(name: "Nunito-Bold", size: 24)!
]
self.navigationController?.navigationBar.titleTextAttributes = attrs
self.navigationController?.navigationBar.largeTitleTextAttributes = attrs
调用初始视图控制器的代码崩溃,在导航之前的几个控制器。 看起来控制器失去了对调用者的引用。 关于如何验证控制器引用的任何想法?
初始视图中显示的错误代码是
Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
起源于第二个Controller
【问题讨论】:
错误信息是什么? 刚刚添加了错误码 添加异常断点。很可能您根本没有连接@IBOutlet @Paulw11IBOutlet 已连接(通过重新连接仔细检查) @matt 标题是“viewDidLoad 中 super 的错误引用”,因为 8' 视图尝试在 super.viewDidLoad 中无任何理由地加载第一个 【参考方案1】:在不知道错误码的情况下可以尝试以下方法
if let vc = storyboard?.instantiateViewController(withIdentifier: "vcID") as? SecondController
let nav = UINavigationController(rootViewController: vc)
self.present(nav, animated: true, completion: nil)
你确定“vcID”和故事板上的一样吗
【讨论】:
@AlessioZ 100% 一样吗?就像你复制粘贴一样?额外的空间会搞砸吗?我上面的代码没有用吗? 刚刚验证,建议的代码并没有解决问题。第二个控制器运行 func super.viewDidLoad() 并崩溃,因为它调用了初始视图而不是第一个视图以上是关于viewDidLoad 上的 super 引用错误的主要内容,如果未能解决你的问题,请参考以下文章
在 super.viewDidLoad() 之前和之后不同的 UIImageView.frame.size :我做错了啥?
在两个嵌套子类中调用 super.viewDidLoad() 时,我遇到了 Swift 的无限循环