Четко сказано, что я пытаюсь выполнить: Я пытался получить посты, хранящиеся в firebase, и отобразить их в collectionView. Они должны быть отсортированы (в настоящее время успешно выполняются с помощью запросов Firebases) от самых новых к самым старым, я отслеживаю это в БД, используя метку времени:
ref.child("Timeline").child((Auth.auth().currentUser?.uid)!)
.queryOrdered(byChild: "timeStamp")
.queryLimited(toLast: 10)
.observeSingleEvent(of: .value, with: { (snapshot) in
Для этого мне нужно сначала получить из текущей пользовательской шкалы 10 самых последних сообщений. Затем мне нужно в цикле for перейти в узел Post, в котором хранятся фактические записи и получать фактические данные постов. Затем, как только это будет сделано, мне нужно получить информацию о профиле пользователя, чтобы я мог отобразить имя пользователя и profileImage.
Я удаляю весь беспорядок из исходного вопроса, поскольку я определил проблемную зону.
Проблема начинается, как только я получаю метод fetchUsersPost в каждом цикле, показанном ниже:
var index = 0
for case let rest as DataSnapshot in snapshot.children.reversed() {
let keyValue = rest.key
let UID = keyValue.split(separator: ":")[0]
let postIDDoubleVal = keyValue.split(separator: ":")[2]
self.getPost(userID: "\(UID)", postID: "post:\(postIDDoubleVal)") { post in
self.postArray.append(post)
if index == (snapshot.children.allObjects.count)-1 {
print("Reload")
self.collectionView.reloadData()
} else {
index+=1
}
}
}
При просмотре дат, напечатанных в операторе print внутри массива, я вижу такие значения, как: 21 ч назад-1 день назад, как и следовало ожидать Но, глядя на операторы print внутри замыкания, даты совпадают с явлением (проблемой), которое я видел в моем collectionView.
То есть: сообщения сортируются по дате, а затем группируются по пользователю или uid. В основном, избавление от порядка, который они имели.
Вот функция выборки:
func getPost(userID: String, postID: String, completion: @escaping((_ completion: Post)->())) {
let ref = Database.database().reference()
ref.child("Posts/\(uid)/\(postID)").observeSingleEvent(of: .value, with: { snapshot in
let userObj = User(theuserID: uid)
self.retrieveUsersInfo(userObj: userObj) { user in
print(user.username, " This is the username")
}
})
}
Вот метод получения:
func retrieveUsersInfo(UID: String, completion: @escaping((_ user: User)->())) {
let ref = Database.database().reference()
ref.child("users2").child(UID).observeSingleEvent(of: .value, with: { (snapshot) in
//this will return a userObj
completion(self.addUserDataToObject(uid: UID, snapshot: snapshot))
})
}
Как это исправить?