получить сообщение чата в firebase в ios swift - PullRequest
0 голосов
/ 31 мая 2019

enter image description here

Я использую firebase для приложения чата. Когда я пытаюсь отправить сообщение.чем сообщение, таблица получила значение, но не обновила таблицу сообщений чата.Я ссылаюсь на эту ссылку здесь [https://github.com/DevSurya/ChatApp-Swift-And-Firebase].

, когда я запускаю демо-версию, она работает нормально.В моем случае метод Observe не вызывается, а представление коллекции не обновляется

. Так я пишу данные:

private func sendMessageWithProperty(_ property: [String: AnyObject]){
        let ref = Database.database().reference().child("messages")
        let childRef = ref.childByAutoId()
        let toId = user!.id!
        let fromId = Auth.auth().currentUser!.uid
        let timeStamp = NSNumber.init(value: Date().timeIntervalSince1970)
        var values: [String : AnyObject] = ["toId":toId as AnyObject, "fromId":fromId as AnyObject, "timeStamp":timeStamp]

        values = values.merged(with: property)

        childRef.updateChildValues(values)

        childRef.updateChildValues(values) { (error, ref) in
            if error != nil {
                print(error!)
                return
            }
            self.inputTextField.text = nil
            let userMessageRef = Database.database().reference().child("user-messages").child(fromId).child(toId)
            let messageId = childRef.key
            userMessageRef.updateChildValues([messageId: 1])

            let recipentUserMessageRef = Database.database().reference().child("user-messages").child(toId).child(fromId)
            recipentUserMessageRef.updateChildValues([messageId: 1])
        }
    }

Так я читаю данные

 func observeMessage() {
    guard let uid = Auth.auth().currentUser?.uid, let toId = user?.id else {
        return
    }
    let userMessageRef = Database.database().reference().child("user-messages").child(uid).child(toId)
    userMessageRef.observe(.childAdded, with: { (snapshot) in
        let messageId = snapshot.key
        let messagesRef = Database.database().reference().child("messages").child(messageId)
        messagesRef.observeSingleEvent(of: .value, with: { (snapshot) in
            guard let dict = snapshot.value as? [String: AnyObject] else {
                return
            }
            let message = Message()
            message.setValuesForKeys(dict)
                self.messages.append(message)
                DispatchQueue.main.async {
                    self.collectionView?.reloadData()
                    let indexpath = NSIndexPath.init(item: self.messages.count-1, section: 0)
                    self.collectionView?.scrollToItem(at: indexpath as IndexPath, at: .bottom, animated: true)
                }
        }, withCancel: nil)
    }, withCancel: nil)
}

Функция ObserveMessage () автоматически вызывается при обновлении базы данных. Но в моем случае она не вызывается.Я думаю, что проблема с таблицей пользовательских сообщений: она не создается при отправке сообщения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...