UiPicker没有加载值和索引超出范围

问题描述 投票:-2回答:1

除了以下代码之外,在使用来自远程服务器的休息调用的UIPickerView n值中。但这些值不会显示在UIPickerView中。我验证了其余调用正确加载了值,但是我们可以继续在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])
    })
}
ios swift uipickerview
1个回答
0
投票

所有UI更新都应该在所谓的主线程或UI线程上进行。如评论中所述,在主线程中运行reload:

atemp.CaricaTipologieArticoli(completion: { result in
    if !result.isEmpty{        
        DispatchQueue.main.async {
            self.TipologiaLoad = result
            self.TipologiaUIPicker.reloadAllComponents()
        }
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.