pickerView неожиданно обнаружил nil при разворачивании необязательного

У меня есть следующий код. Никаких ошибок. Приложение вылетает. Не уверен, правильно ли я инициализировал. Пожалуйста, очень ценим любую помощь.

@IBOutlet weak var myCostPicker: UIPickerView!

var costCode = String()

override func viewDidLoad() {
    super.viewDidLoad()
    if let projectNum = projectNum {
        projectNumTitle.title = projectNum

    }

    updateLabels()
    myCostPicker.dataSource = self
    myCostPicker.delegate = self
    myCostPicker.showsSelectionIndicator = true
    self.view.backgroundColor = UIColor.blackColor()
}

let pickerData = ["Nothing", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q"]

let costCodeData = ["Nothing", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q"]

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
    return 1
}

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return pickerData.count
}

// MARK: - Picker Delegates
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String {
    return pickerData[row]
}

func pickerView(pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {
    let titleData = pickerData[row]
    var myTitle = NSAttributedString(string: titleData, attributes: [NSFontAttributeName:UIFont(name: "Georgia", size: 15.0)!,NSForegroundColorAttributeName:UIColor.whiteColor()])
    return myTitle
}

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    myLabel.text = pickerData[row]
    costCode = costCodeData[row]
}

Дошел до ментального блока. Нужен кто-нибудь, чтобы трясти мою башку. Оценил.


person Michael Reilly    schedule 20.03.2015    source источник
comment
Вы пытались инициализировать представление UIPicker, как этот вопрос? stackoverflow .com / questions / 25314025 /   -  person BigRon    schedule 20.03.2015
comment
добавьте этот код в свою функцию viewDidLoad после super.viewDidLoad (): if myCostPicker == nil { fatalError("myCostPicker is nil, because it is not hooked up in storyboard.") }   -  person Matthias Bauch    schedule 20.03.2015
comment
вы связали IBOutlet с UIPickerView в построителе интерфейсов?   -  person rakeshbs    schedule 20.03.2015


Ответы (1)


Если я правильно понял ваш вопрос, кажется, что у вас есть настройки средства выбора, сделанные в вашей раскадровке ИЛИ XIB, но средство выбора, похоже, не заполняет данные из массива pickerData.

Я пробовал ваш код, и он работает очень хорошо, это может быть привязка IBOutlet, которую вы, возможно, не сделали, с правильным классом контроллера представления.Также, если вы используете подход раскадровки / XIB, попробуйте добавить источник данных и делегат из .storyboard или сам файл .xib

введите описание изображения здесь

OR

по какой-то забавной причине pickerData может сбрасываться, вы можете проверить это с помощью отладчика.

Если все настройки выполнены правильно, а затем вы также не можете увидеть окончательный результат, тогда иногда, когда вы создаете новые файлы классов касания какао, они не создаются правильно, поэтому вы удаляете их и воссоздаете их снова (я знаю, что это действительно глупо, но это действительно иногда работает)

person NSDumb    schedule 20.03.2015
comment
Это была отсутствующая ссылка на IBOutlet. Спасибо за помощь. - person Michael Reilly; 22.03.2015
comment
@MichaelReilly: Счастлив, что смог вам чем-то помочь, Happy Coding - person NSDumb; 23.03.2015