Ios 为什么ViewDidLoad()中的self.currentViewController为nil?

Ios 为什么ViewDidLoad()中的self.currentViewController为nil?,ios,swift,viewcontroller,Ios,Swift,Viewcontroller,最近更改了项目中的哪个视图是起点(IB中的箭头指向它),现在当应用程序在模拟器中启动时,我得到以下错误: 致命错误:在展开可选值时意外发现nil 错误发生在视图的ViewDidLoad()期间,过去是的起点,但现在不是。老实说,我甚至不知道它为什么会加载,但这并不是Swift的一部分,我对Swift的了解还不够,无法识别在启动时加载这个视图是否是预期的。发生错误的代码是: override func viewDidLoad() { print("Former First View st

最近更改了项目中的哪个视图是起点(IB中的箭头指向它),现在当应用程序在模拟器中启动时,我得到以下错误:

致命错误:在展开可选值时意外发现nil

错误发生在视图的ViewDidLoad()期间,过去是的起点,但现在不是。老实说,我甚至不知道它为什么会加载,但这并不是Swift的一部分,我对Swift的了解还不够,无法识别在启动时加载这个视图是否是预期的。发生错误的代码是:

override func viewDidLoad() {

    print("Former First View starts DidLoad")

    // Code to enable the containerView to work:
    self.currentViewController = self.storyboard?.instantiateViewController(withIdentifier: "SmallViewWithinMainView")
    self.currentViewController!.view.translatesAutoresizingMaskIntoConstraints = false
    self.addChildViewController(self.currentViewController!)
    // Error occurs in the next line:
    self.addSubview(subView: self.currentViewController!.view, toView: self.SortFilterEtcContainerView)

    super.viewDidLoad()

    // ...
经过测试,self.currentViewController实际上现在为零,但我不清楚如何修复这种情况。在改变之前,当这个视图是一切开始的时候,它运行得很好。需要做什么才能使self.currentViewController不再为零

你必须打电话

super.viewDidLoad()
viewDidLoad
函数的第一行

然后一个合适的解决办法是停止强制展开选项

之前:不好

// Code to enable the containerView to work:
self.currentViewController = self.storyboard?.instantiateViewController(withIdentifier: "SmallViewWithinMainView")
self.currentViewController!.view.translatesAutoresizingMaskIntoConstraints = false
self.addChildViewController(self.currentViewController!)
    // Code to enable the containerView to work:
        if let curView = self.storyboard?.instantiateViewController(withIdentifier: "SmallViewWithinMainView") {
            curView.view.translatesAutoresizingMaskIntoConstraints = false
            self.addChildViewController(curView)
        } else {
            // Error
        }
之后:

// Code to enable the containerView to work:
self.currentViewController = self.storyboard?.instantiateViewController(withIdentifier: "SmallViewWithinMainView")
self.currentViewController!.view.translatesAutoresizingMaskIntoConstraints = false
self.addChildViewController(self.currentViewController!)
    // Code to enable the containerView to work:
        if let curView = self.storyboard?.instantiateViewController(withIdentifier: "SmallViewWithinMainView") {
            curView.view.translatesAutoresizingMaskIntoConstraints = false
            self.addChildViewController(curView)
        } else {
            // Error
        }

xcode 9和swift 3也存在同样的问题。 我通过以下方式固定了ViewController:

if let destinationViewController = self.storyboard?.instantiateViewController(withIdentifier: "ReaIDController") as? DetalleIpadViewController 

super.viewDidLoad()在顶部,似乎viewcontroller没有初始化。如果
self.currentViewController
为nil,我希望您的错误会提前两行出现。您确定是
currentViewController
为零,还是
self.SortFiltereTContainerView
为零?@pbasdf添加了一些代码来单独检查每件事,甚至从一开始就是self.currentViewController为零。奇怪的是,这个错误直到它出现的时候才会出现。什么可以使self.currentViewController为零???有两种可能性:1)self.storyboard为零;或者2)情节提要中的标识符错误。感谢您的建议,但没有帮助。与前面相同的行会得到与前面相同的错误。请注意,在我转换哪个视图获取初始条目之前,代码运行良好,因此当if let curveview=。。。这显然是一个很好的实践,无论是它还是super.viewDidLoad(),它在换班前都没有导致错误。而且,错误似乎不是“let curveview…”为零,而是正如@pbasdf所建议的,另一个——toView——为零。因为当我现在运行simluator时,没有到达“//Error”——同一行只是创建了一个错误。