2017-04-18 19 views
0

任意のデータを返さない、私は値をフェッチしようとしています。この機能を使用して生きる:スウィフトIOS Firebaseは

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()決してありません解雇される。私のDBがどのように見えるか

これは次のとおりです。私のコードでも

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

withCancel関数が何をするのでしょうか?

DB構造: enter image description here

更新 Iは返すprint(snapShot)を追加:

Snap (url) www.someurl.com 
+0

これはprint(辞書)を起動しません。 –

+0

@ NazmulHasan誰も解雇されることはありません。let let dictionary = snapShot.value as? [String:Any] {'私は使用できないと思います。[String:Any] – Kiow

+0

@NazmulHasan返す' print(snapShot) 'を追加しました: Snap(url)www.someurl.com – Kiow

答えて

0

Firebaseそうユーザーユーザと同じでない場合、ノードキー名に敏感ですあなたのコードはユーザーにアクセスしていますが、構造はUsersです。

コード

handle = ref?.child("users") 

構造

MyRootDb123 
-Users 
    --Id (Child of users) 

更新ユーザーノードに.childChangedオブザーバーを添付し、ユーザーへの変更を処理する方法を表示します。

だが、我々は、ユーザーのノードに.childChangedオブザーバを添付して、基本的なFirebase構造

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

から始めましょう。ユーザーノード内の子が変更されると、変更されたノードがクロージャに渡されます。

これをテストするために
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コンソールで、我々はwww.leonard.comからwww.yipee.comにuid_0のurl子を変更、この

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スクリーンショットは* Users *を表示し、あなたのコードは* users *を表示しています。これは大文字と小文字を区別し、そのエラーでは動作しません。印刷(スナップショット)すると、Firebaseから取得したデータが印刷されます - スナップショットは空白なので何も印刷されません。コードは動作していますが、TypoのためにFirebaseから何も戻ってこないので、*働いていません。あなたの投稿とあなたのコードのタイプミスを修正して、もう一度問題を見てみましょう。 – Jay

+0

私は今や私のタイプミスを修正しました – Kiow

関連する問題