Swift ios Firebase没有返回任何数据

时间:2017-04-18 16:25:04

标签: ios swift firebase firebase-realtime-database

我正在尝试使用此功能实时获取值:

handle = ref?.child("Users").child(String(itemId)).observe(.childChanged, with: { (snapShot) in

                        if let dictionary = snapShot.value as? [String: Any] {
                            print(dictionary)
                            if let profileImageUrl = dictionary["url"] as? String {
                                print(profileImageUrl)
                            }
                        }
                    }, withCancel: nil)

我启动了我的应用程序然后我转到我的firebase控制台并对该孩子进行了一些更改,但我的print()永远不会被解雇。

这就是我的数据库的样子:

MyRootDb123
-Users
   --Id (Child of users)
     --- url inside Id
     --- name inside Id
     --- age inside Id

同样在我的代码中,withCancel函数做了什么?

数据库结构: enter image description here

更新 我添加了print(snapShot),返回:

Snap (url) www.someurl.com

1 个答案:

答案 0 :(得分:0)

Firebase对节点密钥名称区分大小写,因此用户用户不同,而您的代码正在访问用户,但结构是用户。

handle = ref?.child("users")

结构

MyRootDb123
-Users
   --Id (Child of users)

更新以显示如何将.childChanged观察者附加到用户节点并处理对用户的更改。

让我们从基本的Firebase结构开始

users
  uid_0
    name: "Leonard"
    url: "www.leonard.com
  uid_1
    name: "Bill"
    url: "www.bill.com"

然后我们将.childChanged观察者附加到users节点。当users节点中的子节点发生更改时,更改的节点将传递给闭包。

let usersRef = self.ref.child("users")

usersRef.observe(.childChanged, with: { snapshot in
    let userDict = snapshot.value as! [String: AnyObject]
    let name = userDict["name"] as! String
    let url = userDict["url"] as! String
    print("\(name) now has url of:  \(url)")
})

要对此进行测试,请在Firebase控制台中将uid_0的url子级从www.leonard.com更改为www.yipee.com,如下所示

users
  uid_0
    name: "Leonard"
    url: "www.yipee.com" //here's the new url
  uid_1
    name: "Bill"
    url: "www.bill.com"

由于更改是在uid_0中,它在上面的代码中传递给闭包的那个节点将打印出来:

Leonard now has url of:  www.yipee.com