问题
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 view
in advance:
if detail.description == "About" {
_ = self.view
labelView.backgroundColor = UIColor.red
}
来源:https://stackoverflow.com/questions/41812047/iboutlet-is-nil