QueryLimited (toLast: 1) firebase Chat Mesenger Swift - PullRequest
0 голосов
/ 04 мая 2018

Я работаю в приложении чата, и я хочу показать последнее отправленное сообщение в главном меню, как показано:

enter image description here

и моя база данных выглядит как

enter image description here

, на мой взгляд, загрузился, я ставлю функцию getAllMsg ()

    override func viewDidLoad() {
    super.viewDidLoad()
    self.title = "Private Message"
    // Do any additional setup after loading the view.
    getAllMsg()
}

Но в моей функции getAllMsg() я не уверен, как мне получить доступ к последнему сообщению для каждого получателя. Я использовал этот код:

func getAllMsg() {
    self.users = []

    let ref = Database.database().reference().child("privateMessages")
    ref.queryLimited(toLast: 1).observeSingleEvent(of: .childAdded) { (snapshot) in
        print(snapshot)
    }
        }

и я получаю все сообщения, отправленные моему последнему получателю. У кого-нибудь есть идеи, как мне поступить об этом?

1 Ответ

0 голосов
/ 04 мая 2018

Вы звоните Database.database().reference("privateMessages").queryLimited(toLast: 1), что означает, что база данных переходит к /privateMessages, а затем получает последний дочерний элемент под этим. Этот ребенок - это целое количество сообщений пользователя, а не только последнее сообщение.

Если вы хотите последнее сообщение для конкретного пользователя, вы должны начать свой запрос на узле этого пользователя:

// this code assumes there is a current user
let user = Auth.auth().currentUser
let ref = Database.database().reference("privateMessages").child(user.uid)

Теперь вы хотите запрашивать сообщения этого пользователя, предположительно, по метке времени или по ключу (который также является хронологическим). Для последнего вы бы сделали:

ref.queryOrderedByKey().queryLimited(toLast: 1).observeSingleEvent(of: .childAdded) { (snapshot) in
    print(snapshot)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...