简体   繁体   中英

Custom Class throwing error unexpectedly found nil while unwrapping an Optional value when using 2 different ViewControllers

I'm still new to swift so any help would be appreciated.

I have a simple set of pickerviews which are defined in 2 custom classes (ImageModelPicker and TimeModelPicker. When ever I load the ViewController that they are in directly there is no issue. When I load them after loading another (title screen) view controller their values throw: found nil while unwrapping an Optional value when using 2 different ViewControllers

Here is the main code:

@IBOutlet weak var pickerImageView: UIPickerView! // image pickerview
var imageModelPicker: ImageModelPicker! // initializing

@IBOutlet weak var pickerTimeView: UIPickerView! //time pickerview
var timeModelPicker: TimeModelPicker! // initializing

override func viewDidLoad() {
    super.viewDidLoad()

    // image model picker
    self.imageModelPicker = ImageModelPicker()
    self.imageModelPicker.modelData = Data.getData()
    //rotate frame and delegate pickerImageView
    let rotationAngle = -90 * (Double.pi/180)
    self.pickerImageView.delegate = imageModelPicker
    self.pickerImageView.dataSource = imageModelPicker
    pickerImageView.transform = CGAffineTransform(rotationAngle: CGFloat(rotationAngle))
    pickerImageView.frame = CGRect(x: -100, y: (view.center.y) - 25, width: view.frame.width + 200, height: 50)
    pickerImageView.selectRow(5, inComponent: 0, animated: true) // select default value

Actually, you are not initialize a variable by this code:

var imageModelPicker: ImageModelPicker!

As a result, you get an error, because you try to use nil instead of instance of the ImageModelPicker class.

Try this code:

@IBOutlet weak var pickerImageView: UIPickerView! // image pickerview
var imageModelPicker = ImageModelPicker() // initializing

@IBOutlet weak var pickerTimeView: UIPickerView! //time pickerview
var timeModelPicker: TimeModelPicker! // initializing

override func viewDidLoad() {
    super.viewDidLoad()

    // image model picker
    self.imageModelPicker.modelData = Data.getData()
    //rotate frame and delegate pickerImageView
    let rotationAngle = -90 * (Double.pi/180)
    self.pickerImageView.delegate = imageModelPicker
    self.pickerImageView.dataSource = imageModelPicker
    pickerImageView.transform = CGAffineTransform(rotationAngle: CGFloat(rotationAngle))
    pickerImageView.frame = CGRect(x: -100, y: (view.center.y) - 25, width: view.frame.width + 200, height: 50)
    pickerImageView.selectRow(5, inComponent: 0, animated: true) // select default value

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM