Я создал представление выбора с двумя компонентами с другим источником данных:
func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView {
let pickerLabel = UILabel()
let titleLabel = firstFieldArray[row]
let titlelabel2 = secondFieldArray[row]
if component == 0 {
let myTitle = NSAttributedString(string: titleLabel, attributes: [NSFontAttributeName:UIFont(name: "Georgia", size: 15.0)!,NSForegroundColorAttributeName:UIColor.blackColor()])
pickerLabel.attributedText = myTitle
} else {
let myTitle = NSAttributedString(string: titlelabel2, attributes: [NSFontAttributeName:UIFont(name: "Georgia", size: 15.0)!,NSForegroundColorAttributeName:UIColor.blackColor()])
pickerLabel.attributedText = myTitle
}
return pickerLabel
}
это моя модель данных:
class professionArrays {
func professsionValues() -> [String] {
return ["Engineer", "Information Technology", "Teacher"]
}
func subProfessionValues(profession: String) -> [String] {
if profession == "Engineer" {
return ["Electrical Engineer","Sex Engineer","Civil Engineer","Software Engineer"]
} else if profession == "Information Technology" {
return ["IT Programmer","UI/UX Designer","Tester/Debugger"]
} else {
return ["English Teacher", "Math Teacher", "Physics Teacher"]
}
}
}
В представлении выбора отображаются массивы, когда я выбираю «Инженер», «Информационные технологии» и «Учитель», они показывают их субпрофессиональные значения во втором компоненте.
Ошибка возникает, например, когда я выбираю «Информационные технологии» и выбираю «Инженер» в первом компоненте, а когда я перемещаю значение второго компонента, возникает ошибка:
ошибка: фатальная ошибка: индекс массива вне допустимого диапазона
редактировать: код внутри делегата didSelectRow
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if component == 0 {
let professionAndSubProfession = professionArrays()
let currentValue = firstFieldArray[row]
secondFieldArray = professionAndSubProfession.subProfessionValues(currentValue)
pickerView.reloadAllComponents()
firstProfessionCurrentValue = firstFieldArray[row]
print(firstProfessionCurrentValue)
selectedProfessionLabel.text = firstProfessionCurrentValue
professionTextfield.text = firstProfessionCurrentValue
} else {
secondSubProfessionCurrentValue = secondFieldArray[row]
selectedSubProfessionLabel.text = secondSubProfessionCurrentValue
professionTextfield.text = "\(firstProfessionCurrentValue!) - \(secondSubProfessionCurrentValue!)"
print(secondSubProfessionCurrentValue)
pickerView.reloadAllComponents()
}
}