使用同步

时间:2017-11-10 14:22:25

标签: ios swift swift3

我有一个带有两个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")
        }

    }

或任何人有其他方法来解决它?

1 个答案:

答案 0 :(得分:0)

首先,您不能在委托回调中调用DispatchQueue.main.sync,因为这些已经在主线程中运行。

第二:据我所知,如果用户在colA中选择了某些内容,则会更改colB的模型,并希望刷新数据。你的模型是否正确;它是否在numberOfComponentspickerView(:numberOfRowsInComponent:)

中提供了正确的值

第三,您可以尝试更改selectRowreloadComponent来电的顺序。虽然我几乎可以肯定这不应该影响任何事情。