2017-04-18 87 views
0

我试图获取值居住使用此功能:斯威夫特IOS火力地堡不返回任何数据

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) 

我开始我的应用程序,然后我去我的火力控制台和做一些改变这个孩子,但我print()从未被解雇。

这是我的数据库看起来像:

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

而且在我的代码,什么是withCancel功能吗?

DB结构: enter image description here

更新 我加print(snapShot)返回:

Snap (url) www.someurl.com 
+0

哪一个不会触发'print(dictionary)'? –

+0

@NazmulHasan没有人被解雇,如果让字典= snapShot.value为? [String:Any] {''我认为我不能使用[String:Any] – Kiow

+0

@NazmulHasan我添加了'print(snapShot)',它返回: Snap(url)www.someurl.com – Kiow

回答

0

火力地堡是大小写敏感的节点键名称,以便用户是不一样的用户并且您的代码正在访问用户,但结构是Users。

代码

handle = ref?.child("users") 

结构

MyRootDb123 
-Users 
    --Id (Child of users) 

更新展示如何将.childChanged观察者附加到用户节点和处理的改变给用户。

让我们先从基本的火力地堡结构

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

然后我们附上.childChanged观测到用户节点。当用户节点中的子节点发生更改时,更改的节点将传递给闭包。

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)") 
}) 

为了验证这一点,在火力地堡控制台我们改变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 
+0

我在我的文章中犯了一个错字。当我调用print(snapShot)''它输出**“Snap(url)www.someurl.com”**时,我的代码似乎很有用,但我不明白我如何检查我的节点是否有特定的值。当我通过控制台更改我的“url”值时,上面的输出被打印出来 – Kiow

+0

@Kiow屏幕截图显示*用户*,您的代码显示*用户*。它是区分大小写的,不会与该错误一起工作。当您打印(快照)时,它将打印从Firebase检索到的数据 - 因为快照是空白的,它不会打印任何内容。该代码正在运行,但没有*工作*,因为由于错字而无法从Firebase返回任何内容。修复你的文章和你的代码中的错字,我们再看看这个问题。 – Jay

+0

我现在已经修复了我的错字 – Kiow

相关问题