Итак, я работаю над погодным приложением. Я обновляю простые UILabel
без проблем, но проблема заключается в заполнении TableView
данными о погоде, которые я получу от API. В моей ViewController
структуре var weatherModel: WeatherModel?
, которая будет установлена после того, как я проанализирую JSON данные в ней. Когда пользователь впервые запускает приложение, я получаю его текущее местоположение с CLLocationManager.requestLocation()
, вызванным с viewDidLoad()
, затем я выполняю вызов API погоды внутри func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
. Затем я обновляю интерфейс. Но, конечно, func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
сработает задолго до того, как мой вызов API завершится, поэтому, когда я пытаюсь развернуть свой weatherModel
внутри, я получаю nil
. Я установил tableView.datasource
и delegate
внутри viewDidLoad()
. Я попытался запросить местоположение перед установкой tableView.dataSource
, например, но это не сработало.
override func viewDidLoad() {
super.viewDidLoad()
locationManager.delegate = self
searchField.delegate = self
weatherController.delegate = self
locationManager.requestWhenInUseAuthorization()
locationManager.requestLocation()
DataTable.delegate = self
DataTable.dataSource = self
DataTable.register(UINib(nibName: "DataCell", bundle: nil), forCellReuseIdentifier: "DataCell")
}
Может быть, мне следует запросить местоположение в viewWillAppear()
, чтобы вызов API выполнялся до tableView cellForRowAt
срабатывает?