1
我正在處理這樣的問題:我必須從服務器數據中提取數據並將其綁定到我的pickerView。但現在,在第一次啓動時,我得到空拾取器,因爲檢索函數執行後viewDidLoad()如何在正常啓動前從服務器加載數據
所以,我可以以某種方式獲取數據之前viewDidLoad()?
我試圖使用DispatchQueue.global(qos:.background).async檢索數據,但它看起來像它以不正確的方式完成。
var currencies = [String]()
override func viewDidLoad() {
super.viewDidLoad()
setDelegates()
setupLabelInPicker()
updatePickerInfoBeforeStart()
}
func updatePickerInfoBeforeStart() {
DispatchQueue.global(qos: .background).async {
self.retrieveCurrency{ [weak self]
currencies in self?.currencies = currencies
}
DispatchQueue.main.async {
self.pickerTo.reloadAllComponents()
}
}
}
方法檢索數據:
func retrieveCurrency(completion: @escaping ([String]) -> Void) {
requestCurrencyRates { [unowned self] (data, error) in
if error != nil {
fatalError()
} else {
comletion(self.parseCurrensyResponse(data: data))
}
}
}
數據綁定到選擇器:
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return currencies[row]
}
是否存在這樣的任務,共同的方法?
爲什麼不顯示某種加載屏幕,同時服務被調用? –