Ios 无法通过观察Firebase中的数据库引用获取顶级节点的值

Ios 无法通过观察Firebase中的数据库引用获取顶级节点的值,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,我试图用Swift语言从Firebase数据库(本例中为[branch1,branch2])获取分支列表, 当我观察顶部节点(“分支”)时,它不返回任何内容,甚至第一个print函数也没有被调用,但是如果我观察像branch1这样的分支,它工作得很好。 现在如何检索分支列表([branch1,branch2]) 获取branch1的工作代码是: ref.child("branches").child("branch1").observe(.value, with: { snapshot

我试图用Swift语言从Firebase数据库(本例中为[branch1,branch2])获取分支列表, 当我观察顶部节点(“分支”)时,它不返回任何内容,甚至第一个print函数也没有被调用,但是如果我观察像branch1这样的分支,它工作得很好。 现在如何检索分支列表([branch1,branch2])

获取branch1的工作代码是:

   ref.child("branches").child("branch1").observe(.value, with: { snapshot in

      let address = snapshot.childSnapshot(forPath: "address").value 
      print("\(address)")
   }
它将打印正确的结果(NDG)

安全规则:

{  "rules": {
"Users":{
  "$uid":{
    ".read":"auth.uid == $uid || root.child('Users').child(auth.uid).child('isAdmin').val()==true",
    ".write":"auth.uid == $uid || root.child('Users').child(auth.uid).child('isAdmin').val()==true"


  }

},  "branches":{
"$branchId":{
".read" : "auth.uid == true || root.child('Users').child(auth.uid).child('isAdmin').val()==true || root.child('branches').child($branchId).child('users').child(auth.uid).exists()",
        ".write" :  "auth.uid == true || root.child('Users').child(auth.uid).child('isAdmin').val()==true || root.child('branches').child($branchId).child('users').child(auth.uid).child('isAdmin').val()==true"

}}}}

感谢@vzsg,我发现问题出在权限和规则上。所以我改变了规则,我很容易得到结果

{  "rules": {
      "Users":{
        "$uid":{
    ".read":"auth.uid == $uid ||       root.child('Users').child(auth.uid).child('isAdmin').val()==true",
    ".write":"auth.uid == $uid || root.child('Users').child(auth.uid).child('isAdmin').val()==true"


  }

},  "branches":{
        ".read": " root.child('Users').child(auth.uid).child('isAdmin').val()==true" ,
        ".write" :  "root.child('Users').child(auth.uid).child('isAdmin').val()==true ",

"$branchId":{
   ".read": " root.child('branches').child($branchId).child('users').child(auth.uid).exists()",
   ".write" :  "root.child('branches').child($branchId).child('users').child(auth.uid).child('isAdmin').val()==true"

}}  }}

你能把代码添加到你的问题中去吗?此外,最好的做法是将firebase结构发布为文本,而不是图像或链接。这样,它就可以搜索,我们在回答问题时不必重新键入,最重要的是,如果图片的主人发生了变化,这就打破了问题。因此,请坚持将其作为文本包含。谢谢@Jay,我会这样做。您可以发布安全规则的相关部分吗?似乎
/branchs
是不可读的,而
/branchs/$branchhid
是。@vzsg我已经添加了规则。我已经更改了规则,它工作正常,我想知道为什么它不工作,因为我使用的是管理员帐户,管理员应该可以这样做
{  "rules": {
"Users":{
  "$uid":{
    ".read":"auth.uid == $uid || root.child('Users').child(auth.uid).child('isAdmin').val()==true",
    ".write":"auth.uid == $uid || root.child('Users').child(auth.uid).child('isAdmin').val()==true"


  }

},  "branches":{
"$branchId":{
".read" : "auth.uid == true || root.child('Users').child(auth.uid).child('isAdmin').val()==true || root.child('branches').child($branchId).child('users').child(auth.uid).exists()",
        ".write" :  "auth.uid == true || root.child('Users').child(auth.uid).child('isAdmin').val()==true || root.child('branches').child($branchId).child('users').child(auth.uid).child('isAdmin').val()==true"

}}}}
{  "rules": {
      "Users":{
        "$uid":{
    ".read":"auth.uid == $uid ||       root.child('Users').child(auth.uid).child('isAdmin').val()==true",
    ".write":"auth.uid == $uid || root.child('Users').child(auth.uid).child('isAdmin').val()==true"


  }

},  "branches":{
        ".read": " root.child('Users').child(auth.uid).child('isAdmin').val()==true" ,
        ".write" :  "root.child('Users').child(auth.uid).child('isAdmin').val()==true ",

"$branchId":{
   ".read": " root.child('branches').child($branchId).child('users').child(auth.uid).exists()",
   ".write" :  "root.child('branches').child($branchId).child('users').child(auth.uid).child('isAdmin').val()==true"

}}  }}