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

가 있습니까는 작업에 대한 일반적인 접근 방식을 존재 하는가? IMO

+0

서비스로드 중일 때 서비스가 호출되는 이유는 무엇입니까? –

답변

0

아래하여이 작업을 수행 할 수는 접근 :

1)

당신은 당신의 출시 storyboard 같이 정확한 UI와 더미 시작 화면를 만들 수 있습니다 응용 프로그램 실행에 필요한 데이터를 가져 오기 거기서 서버 data을 가져올 수 있습니다. 나중에 필요할 때마다이 데이터를 pickerView으로 전달해야합니다. 그냥 itself.You가 그 사이에 당신이 데이터를 가져 로더를 표시 할 수 있습니다 당신이 viewController의 서버에서 data를 가져올 수 있습니다이 경우에는 특정의 ViewController

에 필요한 경우

2).