У меня есть 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
}