#ios #swift
#iOS #swift
Вопрос:
Я новичок в разработке iOS app.my история в том, что у меня есть завершение обработки новых данных из API, которые уведомляются с помощью ввода-вывода сокета, каждый раз, когда сокет успешен, я хочу перезагрузить tableview. и сокет работает нормально. Проблема в том, что при первом входе в мое приложение метод tableview.reload не работает, но при повторном запуске моего проекта все в порядке.итак, я хочу спросить, почему tableview не перезагружается в первый раз прямо здесь?. Заранее благодарю вас!!
Примечание1: для tableview.reloadData() не работает, я имею в виду, что он не вызывает вызовы cellForRowAtIndexPath, которые я уже напечатал и установил точку останова для метода cellForRowAtIndexPath
Примечание 2: tableview отображает tableViewCell один раз, и я пытаюсь вызвать tableview.reloadData () для повторного отображения ячейки для обновления пользовательского интерфейса, но это не работает.
Это мой код
override func viewDidLoad() {
super.viewDidLoad()
....................
ChatSocketManagerOnline.shared.lastMessageOn { (data) in
self.data = data
self.tableView.reloadData()
}
Комментарии:
1. Вы установили источник данных для TableView?
2. Что вы имеете в виду, это не работает? Что происходит?
3. Исходя из вашего вопроса, проблема, с которой вы сталкиваетесь, понятна, но нам нужно больше информации, чтобы отфильтровать, почему / как / где это происходит. Вы пробовали использовать какие-либо
4. попробуйте это в основном потоке…
5. @PGDev да, у меня есть
Ответ №1:
try
override func viewDidLoad() {
super.viewDidLoad()
....................
ChatSocketManagerOnline.shared.lastMessageOn { [weak self] (data) in
DispatchQueue.main.async {
self?.data = data
self?.tableView.reloadData()
}
}
Ответ №2:
Потому что вы ChatSocketManagerOnline.shared.lastMessageOn
вводите viewDidLoad()
так, что в вашем табличном представлении данные будут перезагружены один раз при запуске приложения. Пожалуйста, прочитайте документ https://developer.apple.com/documentation/uikit/uiviewcontroller/1621495-viewdidload
Вы должны использовать NotificationCenter для определения успешного выполнения сокета, а затем перезагрузить tableview.
Комментарии:
1. Как вы сказали, перезагрузка данных не должна выполняться в любое время, но в моем случае, когда я повторно запускаю приложение во второй раз, это работает. в результате я не знаю, чего мне здесь не хватает. в любом случае, спасибо вам за вашу помощь.