Получил UITableView, который я заполняю объектами ChatMessage, который я храню в Словаре, сгруппированном по дате, отправленной так: var groupedMessages = [Date : [ChatMessage]]()
Я также храню ключи в var keys = [Date]()
Разделы настроек и выгрузка в ряд работает просто отлично. Также insertRows
ниже работает и добавляет сообщение как новый UITableViewCell, как и ожидалось, и в правильном положении.
Тем не менее, приложение зависало при вызове scrollToRow
с ошибкой NSRangeException, reason: 'Attempted to scroll the table view to an out-of-bounds row (2) when there are only 2 rows in section 1.
@IBAction func sendMessage(_ sender: Any) {
// create new ChatMessage object
var newMessage = ChatMessage()
let now = Date()
newMessage.tsp = now
newMessage.message = self.MessageTextField.text
newMessage.sender = Globals.shared.user
// append to grouped messages
self.groupedMessages[self.keys.last!]?.append(newMessage)
var path = IndexPath(row: self.groupedMessages[self.keys.last!]!.count-1, section: self.keys.count-1)
print("PATH: ", path)
self.MessageList.beginUpdates()
self.MessageList.insertRows(at: [path], with: .fade)
print("PATH 2: ", path)
self.MessageList.scrollToRow(at: path, at: .bottom, animated: true)
self.MessageList.endUpdates()
// call api to store sent message
...
}