gpt4 book ai didi

ios - Firebase 查询不返回任何数据

转载 作者:行者123 更新时间:2023-11-28 11:33:20 25 4
gpt4 key购买 nike

我的数据模型如下所示:

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()。但没有任何帮助。我不确定到底出了什么问题。在这里检查很多答案,没有帮助。我到底在看什么。感谢您的帮助。

最佳答案

使用 .value 而不是 .childAdded,这样无论快照是否存在都会调用闭包,快速测试表明它有效。

func checkUserHasResponded() {
let uid = "uid_0"
let commentsRef = dbRef.child(uid).child("activity").child("comments")
commentsRef.queryOrdered(byChild: "post_id")
.queryEqual(toValue: "post_5")
.observeSingleEvent(of: .value) { snapshot in
if snapshot.exists() {
print("post exists")
} else {
print("post not found")
}
}
}

如果您的结构不包含存在的 post_id 子值,则输出为

post not found

所以这个答案适用于更新后的问题。如果您查询的节点不存在,闭包中的代码将不会运行,因为查询正在使用 .childAdded

FBDataservice.ds.child("allcomments").queryOrdered(byChild: "post_id")
.queryEqual(toValue: "post_id_5")
.observeSingleEvent(of: .childAdded) { (snapshot) in

如果将其更改为 .value,它会返回,如果节点存在,闭包中的代码就会运行。请记住,您将要使用

snapshot.exists()

如果没有,它将为零。

关于ios - Firebase 查询不返回任何数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56312915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com