3

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.

4

2 回答 2

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.

于 2017-01-23T17:38:22.317 回答
0

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
}
于 2017-01-23T18:59:52.647 回答