我有一个带有两个col(colA colB)的pickerView,当colA更改时,colB必须重新加载新数据,然后我注意到当我想用.reloadComponent()
方法用新数据更新colB并且该方法是异步时,这将延迟显示5~6秒,但当我触摸colB时,它会立即更新。
所以我想用同步更新colB,但发生了错误
DispatchQueue.main.sync {
pickerView.selectRow(0, inComponent: 1, animated: false)
pickerView.reloadComponent(1)
}
我收到了一些错误消息
Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
代码部分
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
...
if component == 0{
picker1DIdSelect=row
DispatchQueue.main.sync {
pickerView.selectRow(0, inComponent: 1, animated: false)
pickerView.reloadComponent(1)
}
print("RELOAD")
}
}
或任何人有其他方法来解决它?
答案 0 :(得分:0)
首先,您不能在委托回调中调用DispatchQueue.main.sync
,因为这些已经在主线程中运行。
第二:据我所知,如果用户在colA
中选择了某些内容,则会更改colB
的模型,并希望刷新数据。你的模型是否正确;它是否在numberOfComponents
和pickerView(:numberOfRowsInComponent:)
?
第三,您可以尝试更改selectRow
和reloadComponent
来电的顺序。虽然我几乎可以肯定这不应该影响任何事情。