除以下代码外,UIPickerView
中的n个值是通过远程服务器的rest调用获取的。但是这些值不会显示在UIPickerView
中。我验证了rest调用是否正确加载了这些值,但是在我可以继续进行操作时,它们没有显示在UIPickerView
中?
查看:
self.TipologiaUIPicker = UIPickerView(frame: CGRect(x: (self.view.frame.width / 2) - 70, y: 300, width: 200, height: 50))
self.TipologiaUIPicker.delegate = self
self.TipologiaUIPicker.dataSource = self
//self.TipologiaUIPicker.tag=1
self.TipologiaUIPicker.backgroundColor = UIColor.white
let atemp = ArticoloCantiere(Cantiere: CantiereInterno)
atemp.CaricaTipologieArticoli(completion: { result in
self.TipologiaLoad = result
self.TipologiaUIPicker.reloadAllComponents()
});
//Error: index out of range
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
// print("\n TipologiaLoad[row].IdUtente \(TipologiaLoad[row].IdTipologiaPreventivo!)")
DispatchQueue.main.async {
self.IdTipologia = Int(self.TipologiaLoad[row].IdTipologiaPreventivo)!
}
// print("\n TipologiaLoad[row].NomeTipologia \(TipologiaLoad[row].NomeTipologia!)")
}
型号:
func CaricaTipologieArticoli(completion: @escaping ([TipologiaStruct]) -> Void) {
DispatchQueue.global(qos: .userInteractive).async {
let articolo_temp = ArticoloModel()
articolo_temp.CaricaTipologia(completion: {
result in
completion(result)
})
}
}
控制器:
func CaricaTipologia(completion: @escaping ([TipologiaStruct]) -> ()) {
let jsonrequest = JSON()
let jsonarray: [String: Any] = [:]
jsonrequest.GetArray(Tipo: "TipologiaStruct", Router: "/preventivo/caricatipologie", ValueArray: jsonarray, completion: { result in
completion(result as! [TipologiaStruct])
})
}
答案 0 :(得分:0)
所有UI更新应在所谓的主线程或UI线程上进行。如注释中所述,在主线程中运行重新加载:
atemp.CaricaTipologieArticoli(completion: { result in
if !result.isEmpty{
DispatchQueue.main.async {
self.TipologiaLoad = result
self.TipologiaUIPicker.reloadAllComponents()
}
}
});