【问题标题】:Wrong reference of super on viewDidLoadviewDidLoad 上的 super 引用错误
【发布时间】: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 中无任何理由地加载第一个

标签: ios swift xcode uiviewcontroller


【解决方案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() 并崩溃,因为它调用了初始视图而不是第一个视图
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-08
  • 1970-01-01
  • 1970-01-01
  • 2011-10-18
  • 2016-10-12
  • 2018-11-08
  • 1970-01-01
相关资源
最近更新 更多