Как ссылаться на выбранную строку в UIPickerView? - PullRequest
0 голосов
/ 07 апреля 2019

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

. Вот пример того, что я имею в виду

func updateValue {
    desiredValue = myDictionary[pickedKey]
}

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

кто-нибудь знает, почему я получаю ноль фатальную ошибку?он также не позволяет мне объявить selectedKey как необязательный, он говорит: «Невозможно добавить значение типа« [String: String] »с индексом типа« String? »»

update: вот коддля pickerView

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {


        //the selected pick will be stored in pickedKey
        pickedKey = pickerArray[row]

        //the desired value will be the value from the picked key in myDictionary
        desiredValue = myDictionary[pickedKey]!

        foodLabel.text = desiredValue

    }

имейте в виду, что pickerArray - это массив их ключей в myDictionary

var pickerArray: Array = Array(myDictionary.keys.sorted())

1 Ответ

0 голосов
/ 07 апреля 2019

Предполагая, что ваш словарный ключ является string:

Обновить сортировку ключей

var pickerArray: [String] = myDictionary.keys.sorted()

Замените свой didSelectRow этим.


var pickedKey: String?

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if 
       let pickedKey = pickerArray[row] as? String,
       let desiredValue = myDictionary[pickedKey] {
           foodLabel.text = desiredValue     
    } else {
        // TODO: Error
    }
}

Убедитесь, что вы стараетесь не использовать принудительное приведение, так как при возникновении проблем произойдет сбой.

...