#swift #uitableview #reloaddata
#swift #uitableview #reloaddata
Вопрос:
Я прочитал много решений, они мне не помогли
У меня есть представление таблицы, которое добавляется в мой viewcontroller. Я перетащил его как выход на контроллер.
@IBOutlet weak var tableView: UITableView!
В viewDidLoad я добавил
tableView.dataSource = self
tableView.delegate = self
У меня есть способ обновить данные в таблице:
private func updateModel() {
guard let chatUid = UsersManager.sharedInstance.currentChatUID() else { return }
RealtedUserApi().getRelatedUser("(chatUid)", successHandler: { (relatedUsers) in
dispatch_async(dispatch_get_main_queue()) {
self.relatedUsers = relatedUsers
self.tableView.reloadData()
}
}) { (error) in
print(error)
}
}
который выполняется, когда я выполняю pull-to-refresh, но пользовательский интерфейс не обновляется
Я поместил точку останова в ячейку моей таблицы, и данные с сервера (например, статус пользователя) обновляются, но пользовательский интерфейс не обновляется — статус пользователя в представлении остается неизменным в метке ячейки
У кого-нибудь есть идеи, как это исправить?
ps relatedUsers — это массив объектов, связанных с пользователем. Это источник для моего TableView. RelatedUser имеет свойство status, которое изменяется на сервере, и мне нужно обновить соответствующий текст метки в ячейке
Комментарии:
1. Возможно, что ваш chatUid пуст или ваши связанные пользователи пусты. Вы можете попробовать поместить print (relatedUsers) в асинхронную отправку, чтобы проверить, есть ли что-то для отображения
2. relatedUser не равен нулю. Я вижу строки. Мне нужно обновить соответствующий текст метки в ячейке, когда он изменяется на сервере, и relatedUsers обновляется, а пользовательский интерфейс — нет
3. Что вы возвращаете для
numberOfRows
метода?4. в
numberOfRowsInSection
я возвращаюсьreturn relatedUsers?.count ?? 0
5. Попробуйте это:
if let users = relatedUsers where users.count > 0 { self.relatedUsers = users dispatch_async(dispatch_get_main_queue()) { self.tableView.reloadData() } }
Ответ №1:
Проблема была настолько глупой, что мне стыдно:
Я прокомментировал некоторую часть кода в dequeueReusableCellWithIdentifier
блоке, где также был return cell
, и забыл об этом. Но в конце cellForRowAtIndexPath
я возвращаюсь UITableViewCell()
.
Обычно в этом случае приложение вылетает, но в моем случае этого не произошло. Итак, я мог видеть строки с данными с сервера, но обновление не сработало.