Моя модель данных выглядит следующим образом:
allcomments
|__$comment_id_5
|__post_id: <post_id_5>
uid
|
|__activity
|__comments
|__$random_activity_id
|__post_id : <post_id_5> //ref to post_id_5 in allcomments
|__comment_id : <comment_id_5> // ref to comment_id_5 in allcomments
Моя цель : чтобы проверить, прокомментировал ли пользователь с uid
сообщение или нет.Если у этого человека есть, то я могу продолжить, иначе ему будет показано что-то еще на экране.Пытаясь выполнить следующий запрос, я могу получить обратный вызов только тогда, когда существует моментальный снимок, а не иначе.
FBDataservice.ds.child("allcomments").queryOrdered(byChild: "post_id").queryEqual(toValue: "post_id_5").observeSingleEvent(of: .ChildAdded) { (snapshot) in
if let data = snapshot.value as? DataDict {
let comment = Comment(comId: snapshot.key , comData: data)
self.checkUserHasResponded(completion: { (hasResponded) in
if !hasResponded {
// Never returns it there is nothng
print("You gotta respond first")
} else {
//this part does work
print("Welcome to seeing everything")
}
})
}
}
func checkUserHasResponded(completion: @escaping (Bool) -> ()) {
FBDataservice.ds.REF_USERS.child(uid).child("activity/comments").queryOrdered(byChild: "post_id").queryEqual(toValue: "post_id_5").observeSingleEvent(of: .value) { (snapshot) in
snapshot.exists() ? completion(true) : completion(false)
}
}
Я даже пытался настроить архитектуру таким образом и запросить ее по-другому, но все равно ничего не работает, и программаведет себя точно так же, как в случае выше.
uid
|
|__activity
|__comments
|__post_id_5 : comment_id_5
и выполнил этот запрос:
func checkUserHasResponded(completion: @escaping (Bool) -> ()) {
FBDataservice.ds.REF_USERS.child(uid).child("activity/comments").observeSingleEvent(of: .value) { (snapshot) in
snapshot.hasChild("post_id_5") ? completion(true) : completion(false)
}
}
Я попытался изменить .childAdded
на .value
.Это дает точно такой же результат.Попробовал изменить .observeSingleEvent(of:)
на .observe()
.Но ничего не помогает.Я не уверен, что именно не так.Проверьте множество ответов здесь, ни один не помог.Что именно я смотрюСпасибо за помощь.