2

升级到 iOS 14 后出现以下错误。我正在使用一个名为MessageKit的库,它是用它构建的。

在准备更新 <NSIndexPath: 0xd92d17177ece800a> {length = 2, path = 25 - 0} 的可见视图时,在当前数据模型中找不到并且不在更新动画中

有谁知道这个错误是什么意思?崩溃指向scrollToBottom集合视图上的方法。看起来无论出于何种原因,模型中的最后一个项目在运行动画或其他内容时不再存在。我想知道这是否可能是由于打字指示器,但我不确定。

func insertMessage(_ message: NewMessageModel) {
    // Reload last section to update header/footer labels and insert a new one
    DispatchQueue.main.async {
        
        self.isPerformingBatchUpdates = true
        self.messagesCollectionView.performBatchUpdates({
            self.messages.append(message)   //The messages object can only be modified on the main thread
            self.checkLastMessageSent(message: message)
            self.messagesCollectionView.insertSections([self.messages.count - 1])
            if self.messages.count >= 2 {
                self.messagesCollectionView.reloadSections([self.messages.count - 2])
            }
        }, completion: { [weak self] _ in
            self?.messagesCollectionView.scrollToBottom(animated: true)
            self?.isPerformingBatchUpdates = false
        })
    }

}
4

2 回答 2

1

使用下面的功能,它会正常工作。

func insertMessage(_ message: MockMessage) {
    messageList.append(message)
    // Reload last section to update header/footer labels and insert a new one
    messagesCollectionView.performBatchUpdates({
        messagesCollectionView.insertSections([messageList.count - 1])
        if messageList.count >= 2 {
            messagesCollectionView.reloadSections([messageList.count - 2])
        }
    }, completion: { [weak self] _ in
        if self?.isLastSectionVisible() == true {
            self?.messagesCollectionView.scrollToBottom(animated: true)
        }
    })
}
于 2020-10-24T04:40:27.510 回答
0

根据MessageKit您需要使用scrollToLastItem()而不是scrollToBottom(animated:)现在使用的新更改:

func insertMessage(_ message: NewMessageModel) {
    DispatchQueue.main.async {
        
        self.isPerformingBatchUpdates = true
        self.messagesCollectionView.performBatchUpdates({
            self.messages.append(message)
            self.checkLastMessageSent(message: message)
            self.messagesCollectionView.insertSections([self.messages.count - 1])
            if self.messages.count >= 2 {
                self.messagesCollectionView.reloadSections([self.messages.count - 2])
            }
        }, completion: { [weak self] _ in
            self?.messagesCollectionView.scrollToLastItem() // Use it instead of using `scrollToBottom(animated:)`
            self?.isPerformingBatchUpdates = false
        })
    }

}
于 2021-04-09T13:33:46.650 回答