2017-02-21 28 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) Fetch необходимых данных при запуске приложения

Вы можете создать фиктивный заставку с точным интерфейсом, как в вашем запуске storyboard и там вы можете получить свой data с сервера. Позднее вам просто нужно передать эти данные в pickerView всякий раз, когда это необходимо.

2) Если вам просто нужно в конкретном ViewController

В этом случае вы можете принести data от сервера в viewController itself.You может показать загрузчик того времени вы запрашиваете данные.