【发布时间】:2019-04-28 19:27:07
【问题描述】:
当组件 0 更改时,我无法弄清楚如何将 PickerView 的第一个组件中使用的数组重置为组件 0(以避免由于 indexOutOfRange 导致的可能错误)。
这是我的数据结构
let bananas = ["banana1", "banana2"]
let fruitArray = ["banana1" : ["cherry1","cherry2"], "banana2" : ["cherry1", "cherry2", "cherry3"]]
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 2
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if component == 0 {
return bananas.count
}
else {
let selectedBanana = pickerView.selectedRow(inComponent: 0)
return fruitArray[banana[selectedBanana]]!.count
}
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
let selectedBanana = pickerView.selectedRow(inComponent: 0)
let selectedCherry = pickerView.selectedRow(inComponent: 1)
bananaPicked = bananas[selectedBanana]
cherryPicked = fruitArray[bananaPicked]![selectedCherry]
pickerView.reloadAllComponents()
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if component == 0 {
return bananas[row]
}
else {
let selectedBanana = pickerView.selectedRow(inComponent: 0)
return fruitArray[selectedBanana]![row]
}
}
现在,当我(假设)在香蕉 2 和樱桃 3 中,但我切换到香蕉 1 时,我得到一个 indexOutOfRange 错误,因为当然第一个香蕉数组没有第三个项目。每当香蕉行更改为樱桃行重置为 0 时,我都希望它。
__________ 更新 ______________ 这是我发现的另一个导致崩溃的错误(indexOutOfRange),我发布了一个屏幕截图。
【问题讨论】:
-
pickerView.selectedRow(inComponent: 0)返回 Int 值。但是你的fruitArray是一个字典 -
哪一行导致错误?
-
@AhmetSinaUstem 之后的行我应该使用该 Int 访问列表中精确位置的项目(作为字典中的值,使用键香蕉)
-
@rmaddy 导致错误的行是cherryPicked = fruitArray[bananaPicked]![selectedCherry],在 reloadAllComponents() 之前。错误是索引超出范围
标签: arrays swift uipickerview