Я создаю приложение для чата, используя firebasechat
. Я использую кнопку и пытаюсь сгенерировать сообщения, используя textfield
и button
для отправки сообщений. Я могу это сделать. Однако я хотел бы напечатать и отправить сообщения, чтобы показать его в моем tableview
в чате. В тот момент, когда пользователь печатает сообщение, оно генерируется и создается в firebase
. Это отображается только в tableview
после того, как я убил и снова запустил приложение, нажав кнопку отправить. Я даже обновил свой источник данных, так что я больше не получаю сбои, говоря numbers of rows isn't equal to items inserted
. Когда я добавляю сообщение в userMessages, он падает, давая мне это.
'Неверное обновление: недопустимое количество строк в разделе 0. Количество строк, содержащихся в существующем разделе после обновления (2), должно быть равно количеству строк, содержащихся в этом разделе до обновления (0)
var objects: [String] = []
var userMessages = [Any]()
var userChat:UserChat? = nil
override func viewDidLoad() {
super.viewDidLoad()
self.objects = self.userChat!.iDs
}
@IBAction func sendButton(_ pSender: UIButton) {
generateMessages()
}
private func generateMessages() {
let userReference = UserReference(userID: AppDelegate.shared.user!.userID, fullName: AppDelegate.shared.user!.userName, status: .user)
guard let stringText = textField.text else { return }
let message = AppDelegate.shared.userMessages[stringText]
self.conversationMessages.insert(AppDelegate.shared.addMessage(stringText, to: self.conversation!, sender:userReference, type: .text, date: message?.date), at: 0)
let indexPath = IndexPath(row: 0, section: 0)
self.tableView.insertRows(at: [indexPath], with: .top)
self.tableView.scrollToRow(at: indexPath, at: .top, animated: true)
self.tableView.reloadData()
}
func tableView(_ pTableView: UITableView, numberOfRowsInSection pSection: Int) -> Int {
return self.userMessages.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let row = self.objectAtIndexPath(indexPath)
let theCell = tableView.dequeueReusableCell(withIdentifier: reUseIdentifier, for: indexPath)
return theCell
}
func objectAtIndexPath(_ indexPath: IndexPath) -> String {
return self.objects[indexPath.row]
}