2017-02-21 63 views
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] 
} 

是否存在這樣的任務,共同的方法?

+0

爲什麼不顯示某種加載屏幕,同時服務被調用? –

回答

0

IMO你可以用下面這樣做方法:

1)在應用程序啓動獲取所需的數據

您可以創建一個虛閃屏有確切的UI爲您推出storyboard在那裏你可以從服務器獲取你的data。然後你只需要將這些數據傳送到pickerView

2)如果你只需要在一個特定的ViewController

在這種情況下,你可以從viewController服務器獲取data itself.You可以顯示裝載機同時你獲取數據。

相關問題