NSRangeException, причина: 'Попытка прокрутить табличное представление до предела ...' - PullRequest
0 голосов
/ 20 января 2020

Получил 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
            ...

        }

1 Ответ

0 голосов
/ 20 января 2020

Проблема, с которой я столкнулся, заключалась в том, что я пытался прокрутить перед завершением обновления. Исправленный код:

// 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)
        self.MessageList.beginUpdates()
        self.MessageList.insertRows(at: [path], with: .fade)
        self.MessageList.endUpdates()
        self.MessageList.scrollToRow(at: path, at: .bottom, animated: true)
...