#swift
#swift
Вопрос:
Когда я открываю стек контроллера представления, мне нужно, чтобы представление таблицы в первом контроллере представления перезагружалось. Я использую viewWillAppear (я уже пробовал viewDidAppear, и это не сработало).
override func viewWillAppear(_ animated: Bool) {
print("will appear")
loadData()
}
Как только контроллер представления снова появится, мне нужно снова запросить API, что я делаю в другом классе обслуживания, конечно, с обработчиком завершения, а затем перезагрузить представление таблицы:
@objc func loadData() {
guard let userEmail = userEmail else { return }
apiRequest(userId: userEmail) { (queriedArticles, error) in
if let error = error {
print("error in API query: (error)")
} else {
guard let articles = queriedArticles else { return }
self.articlesArray.removeAll()
self.articleTableView.reloadData()
self.articlesArray.append(contentsOf: articles)
DispatchQueue.main.async {
self.articleTableView.reloadData()
}
}
}
}
Что происходит, так это то, что я могу открыть стек и увидеть первый контроллер просмотра, НО у него те же данные, что и раньше. Я ожидаю, что будет еще одна ячейка с новыми данными, и она не появляется. Я должен вручную обновить (используя управление обновлением), чтобы иметь возможность запрашивать и загружать новые данные.
Есть идеи, что я делаю не так?
Комментарии:
1. Вероятно, это не связано, но в любом случае вы должны вызвать
super.viewWillAppear()
в своем переопределении2. Забыл упомянуть. Да, я тоже позвонил super. Не помогло.
3. Извлекается ли ячейка, которую вы ожидаете увидеть, из API? Похоже, вы пытаетесь извлечь те же данные при вызове loadData().
4. Да, он извлекается из API. Да, я извлекаю существующие данные новые данные, а затем перезагружаю tableview.