IBOutlet is nil

不羁的心 提交于 2019-12-10 21:16:41

问题


I have created a standard outlet for a view that will hold different information based on the button selected on the previous screen.

@IBOutlet weak var labelView: UIView!

It shows it is connected in both the story board view and on the code itself, however, every time I get to any reference to the labelView such as:

if detail.description == "About"
{
   labelView.backgroundColor = UIColor.red
}

Then the app crashes out with:

fatal error: unexpectedly found nil while unwrapping an Optional value

I have tried everything I can think of or read on the internet:

  • Removed and replaced the connection

  • Deleted the derived data folder like one post suggested

  • Created a reference to self.view to force it to load

  • Moved it to viewDidAppear

  • Moved it to viewWillAppear

  • Moved it to viewDidLoad (which is where it is currently being
    called)

I am sure at this point that the answer is rather simple and I am just completely missing it.


回答1:


To see where the outlet is being set to nil, try this:

@IBOutlet weak var labelView: UIView? {
    didSet {
        print("labelView: \(labelView)")
    }
}

You should see it set to an initial value when the view is loaded. If it then gets set to nil, put a breakpoint on the print and your should be able to see from the backtrace where it's happening.




回答2:


Views are lazy initialized. In case you are calling the affected line of code before viewDidLoad() in the views life cycle, try to access viewin advance:

if detail.description == "About" {
    _ = self.view
    labelView.backgroundColor = UIColor.red
}


来源:https://stackoverflow.com/questions/41812047/iboutlet-is-nil

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!