我正在处理这样的问题:我必须从服务器数据中获取并将其绑定到我的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]
}
这些任务是否存在共同的方法?
答案 0 :(得分:0)
IMO您可以使用以下方法执行此操作:
1)在应用启动时获取所需数据
您可以使用与启动storyboard
中一样的精确用户界面创建虚拟启动画面,然后您可以从服务器获取data
。之后您只需通过1}}此数据可在需要时提供。{/ p>
2)如果您只需要特定的ViewController
在这种情况下,您可以从pickerView
本身的服务器中获取data
。您可以在获取数据的同时显示加载程序。