如何在正确启动之前在后台从服务器加载数据

时间:2017-02-21 13:21:45

标签: ios swift fetch nsurl

我正在处理这样的问题:我必须从服务器数据中获取并将其绑定到我的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]
}

这些任务是否存在共同的方法?

1 个答案:

答案 0 :(得分:0)

IMO您可以使用以下方法执行此操作:

1)在应用启动时获取所需数据

您可以使用与启动storyboard中一样的精确用户界面创建虚拟启动画面,然后您可以从服务器获取data。之后您只需通过

2)如果您只需要特定的ViewController

在这种情况下,您可以从pickerView本身的服务器中获取data。您可以在获取数据的同时显示加载程序。