Исключение: попытка вставить раздел 0, но после обновления остается только 0 разделов - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть UITableView, показывающий сообщения чата как ViewCells.

Я храню сообщения чата в var groupedMessages = [Date : [ChatMessage]]().

Я использую ключи groupedMessages в качестве таблицы разделы.

Ниже приведен фрагмент кода из моей функции sendChatMessage.

  • В разделе if рассматриваются случаи, когда я начинаю новый разговор.
  • Раздел else добавляет сообщение внизу TableView.

Часть else работает просто отлично. Но приложение вылетает в разделе if с ошибкой attempt to insert section 0 but there are only 0 sections after the update.

Существует несколько решений, опубликованных на stackoverflow, и я считаю, что я сделал все, что упомянуто и на которое есть ссылки, но не могу получить его Работа. Кто-нибудь может увидеть, где моя ошибка?

ОГРОМНОЕ СПАСИБО ЗА ВАШУ ПОМОЩЬ !!!

...
if (self.groupedMessages.count == 0) {
    let tsp = newMessage.tsp
    let message: [ChatMessage] = [newMessage]
    self.groupedMessages = [tsp! : message]
    self.MessageList.insertSections(IndexSet(integer: 0), with: .none)
    let path = IndexPath(row: 0, section: 0)
    self.MessageList.insertRows(at: [path], with: .fade)
    self.MessageTextField.text = nil
    self.MessageList.scrollToRow(at: path, at: .top, animated: false)
    self.SendMessageButton.loadingIndicator(false)
} else {
    self.groupedMessages[self.keys.last!]?.append(newMessage)
    let path = IndexPath(row: self.groupedMessages[self.keys.last!]!.count-1, section: self.keys.count-1)
    self.MessageList.insertRows(at: [path], with: .fade)
    self.MessageTextField.text = nil
    self.MessageList.scrollToRow(at: path, at: .bottom, animated: true)
    self.SendMessageButton.loadingIndicator(false)
}
...

Вот мои реализации для numberOfSections и numberOfRowsInSection

func numberOfSections(in tableView: UITableView) -> Int {
        return self.keys.count
    }

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.groupedMessages[keys[section]]!.count
    }

1 Ответ

0 голосов
/ 10 апреля 2020

Вам не нужно звонить insertRows после вставки раздела. После insertSection таблица будет называться numberOfRowsInSection, и, поскольку вы обновили свою модель (groupedMessages), все будет хорошо. Если вам потребуется впоследствии прокрутить или выполнить другие действия, не могли бы вы обернуть insertSection в вызов performBatchUpdates:completion:.

Я также подозреваю, что ваш метод numberOfSections неправильный ... но это зависит от того, что self.keys является. Что такое self.keys? Похоже, вы не обновляете его в этом коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...