UIPickerView с несколькими компонентами вылетает приложение - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть UIPickerView с 2 компонентами. 1-й компонент - для районов, а 2-й - для городов. Когда я вращаю оба одновременно, я получаю Index out of range и приложение вылетает. Я загружаю данные в словарь на viewDidLoad(). В каждом районе есть несколько городов.

Реализация

func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return PickerViewComponents.allCases.count
}

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    let componentName = PickerViewComponents.allCases[component]

    switch componentName {
    case .district:
        return districts.count
    case .cities:
        let index = pickerView.selectedRow(inComponent: PickerViewComponents.district.rawValue)
        let district = districts[index]
        return districtsDict[district]!.count
    }
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    let componentName = PickerViewComponents.allCases[component]

    switch componentName {
    case .district:
        return districts[row]
    case .cities:
        let index = pickerView.selectedRow(inComponent: PickerViewComponents.district.rawValue)
        let district = districts[index]
        return districtsDict[district]?[row]
    }
}

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    let componentName = PickerViewComponents.allCases[component]
    if componentName == .district {
        let cities = PickerViewComponents.cities.rawValue
        pickerView.reloadComponent(cities)
        pickerView.selectRow(0, inComponent: cities, animated: true)
    } else {
        let index = pickerView.selectedRow(inComponent: PickerViewComponents.district.rawValue)
        let district = districts[index]
        self.districtsTxtField.text = districtsDict[district]![row]
    }
}

Обновление

Приложение вылетает при titleForRow метод return districtsDict[district]?[row]

Это вызывает сбой приложения при вращении 1-го компонента, и пока он вращается, я не могу вращать второй одновременно. Конечно, это не обязательно. Но нужно ли предотвращать сбои приложения при этом? Есть ли способ это исправить?

...