TableView.reloadData не обновляет пользовательский интерфейс

#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() .

Обычно в этом случае приложение вылетает, но в моем случае этого не произошло. Итак, я мог видеть строки с данными с сервера, но обновление не сработало.