У меня есть две таблицы в моей базе данных Firebase в реальном времени: сообщения и пользователи.Структура:
users
-- userID
---- userName
---- userProfilePicURL
posts
-- postID
---- postTimeStamp
---- postTitle
---- postContent
Теперь я выбираю данные в функции loadData () следующим образом:
var Ref: DatabaseReference!
Ref = Database.database().reference()
Ref.child("posts").queryOrdered(byChild: "postTimeStamp").observeSingleEvent(of: .value) { (snapshot) in
for child in snapshot.children {
let snap = child as! DataSnapshot
let dict = snap.value as! [String: Any]
// set all additional information and append to array
self.collectionView?.reloadData()
}
}
Это работает отлично.Однако я хочу выполнить второй запрос для получения информации о пользователе (userName, userProfilePicURL), чтобы ее можно было также отобразить, поскольку все, что у меня сейчас есть, это userID.Я делаю это следующим образом:
var Ref: DatabaseReference!
Ref = Database.database().reference()
Ref.child("posts").queryOrdered(byChild: "postTimeStamp").observeSingleEvent(of: .value) { (snapshot) in
for child in snapshot.children {
let snap = child as! DataSnapshot
let dict = snap.value as! [String: Any]
Ref.child("users").child(dict["userID"] as! String).observeSingleEvent(of: .value, with: { (snapUser) in
let valueUser = snapUser.value as! [String: Any]
// set all additional information and append to array
self.collectionView?.reloadData()
}
}
}
Что происходит, так это то, что он получает информацию о пользователе и отображает ее правильно, но хронологический порядок моего первого запроса разрушен.Он показывает все сообщения одного и того же пользователя, поэтому они упорядочены по userID, а не по postTimeStamp.Есть ли какое-то исправление или мне нужно подходить к этому совершенно по-другому?
ОБНОВЛЕНИЕ: Что я нашел до сих пор Когда я выполняю print (dict), все отображается в правильномпорядок.Таким образом, ошибка возникает на более позднем этапе.Когда я выполняю dump (self.posts), который является массивом со всеми сообщениями, они отображаются в неправильном порядке.
Я предполагаю, что вместо добавления элементов в хронологическом порядке, как было запрошено в первом запросе,они добавляются на основе идентификатора пользователя, поэтому приложение выбирает все сообщения для каждого идентификатора пользователя.Однако я понятия не имею, почему это так, и я не могу найти его в Интернете.