Возможно, мне не хватает дизайна или простой детали, поскольку я новичок в iOS, но не могу понять это:
У меня есть func
с именем getWeatherData()
, чтона основе местоположения, полученного от другого контроллера представления, получает погодные условия из запроса http
и назначает его HikeModel.Эта функция вызывается в методе ViewDidLoad()
.
. После того, как func
получает данные о погодных условиях, она передает это в дочерний контроллер вида.Какой дочерний VC является контроллером табличного представления.Проблема в том, что моя TableViewCell
загружается быстрее, чем требуется для выполнения http-запроса, в родительском контроллере представления.И когда метки ячеек и изображения пытаются получить информацию, которой должны быть присвоены значения, их ничто, поскольку запрос http
не завершился вовремя.
Я также попытался использовать DispatchQueue.main.async
, но без разницыбыл показан.
Я делаю собственный запрос http
со Swift4.
Более подробно о структуре моего проекта я делаю на основе этой работы: https://medium.com/@phillfarrugia/re-creating-the-siri-shortcuts-drawer-interaction-9b2bc94e0b05
В ViewDidLoad
let group = DispatchGroup()
group.enter()
DispatchQueue.main.sync {
self.getWeatherData(hikeLocation: self.startHikeLocationString)
group.leave()
}
Метод отправки информацииfillDrawer
, с тем, что должно содержать переменные погоды, назначенные для HikeModel.
private func configureDrawerViewController() {
let compressedHeight = ExpansionState.height(forState: .compressed, inContainer: view.bounds)
let compressedTopConstraint = view.bounds.height - compressedHeight
containerViewTopConstraint.constant = compressedTopConstraint
previousContainerViewTopConstraint = containerViewTopConstraint.constant
// NB: Handle this in a more clean and production ready fashion.
if let drawerViewController = children.first as? DrawerViewController {
//send distnace too
drawerViewController.delegate = self
drawerViewController.fillDrawer(hike: self.hikeModel, userLocation: self.userLocation)
}
TableView CellsForRowAt
cell.temperature.text = hikeModel.temperature
cell.weather.text = hikeModel.weather
cell.weatherIcon.text = hikeModel.weatherIcon
cell.humidity.text = hikeModel.humidity
cell.barometer.text = hikeModel.barometer
cell.sunrise.text = hikeModel.sunrise
cell.sunset.text = hikeModel.sunset
Я ожидаю загрузки tableViewCell
в дочерний контроллер после выполнения запроса http
в родительском контроллере представления.