2016-04-27 26 views
0

へのアクセス、私はfirebase上の一部のデータにアクセスしようとしているこれは、データ構造は私が問題を抱えている息子のデータFirebase

Firebase Tree

である私は、これは私がに使用したものである 「お気に入り」にアクセスするために管理get

ref.observeEventType(.Value, withBlock: { snapshot in 
     let fav = snapshot.value.objectForKey("favPost") 
     print("\(fav) Printed") 
    }) 

しかし、私は "favPost"にアクセスしようとしていますが、私はそれを理解できませんでしたか?


Firebase構造

{ 
    "posts" : { 
"-KGIxJybfQEJbcSy2bHH" : { 
    "author" : "Rioodi", 
    "postText" : "Test", 
    "votes" : 1 
}, 
"-KGIxLUmPIa1Q1k0oRLs" : { 
    "author" : "Rioodi", 
    "postText" : "Raed", 
    "votes" : 0 
}, 
"-KGJe-5ciAyu6Kom98E0" : { 
    "author" : "Neal", 
    "postText" : "Neal", 
    "votes" : 0 
}, 
"-KGLFC0RqW_48lHMCsx8" : { 
    "author" : "Rioodi", 
    "postText" : "Test", 
    "votes" : 0 
} 
    }, 
    "users" : { 
"afd0f27a-f62f-4cf1-9e81-032edc246687" : { 
    "email" : "[email protected]", 
    "favorite" : { 
    "-KGIxJybfQEJbcSy2bHH" : { 
     "favPost" : "Test" 
    } 
    }, 
    "provider" : "password", 
    "username" : "Rioodi" 
}, 
"fc56cc22-6275-48e0-8376-0b73b273b8e2" : { 
    "email" : "[email protected]", 
    "provider" : "password", 
    "username" : "Neal" 
} 
    } 
} 
+0

投稿してくださいFirebase構造の単一ラインにパスを組み合わせることができます! Firebase DashboardのExportボタンを使用すると、簡単にその情報を取得できます。 – Jay

+0

okay私はfirebaseの構造を投稿しました – Rioodi

答えて

2

をあなたがのuserIdを知って、あなたはまた、あなたが自分の好きなポストを探している知っているので、直接このようにアクセス。

let usersRef = self.myRootRef.childByAppendingPath("users") 
let thisUserRef = usersRef.childByAppendingPath("this users id") 
let thisUserFavoriteRef = thisUserRef.childByAppendingPath("favorite") 

thisUserFavoriteRef.observeSingleEventOfType(.ChildAdded, withBlock: { snapshot in 
    let fav = snapshot.value["favPost"] as! String 
    print(fav) 

}) 

あなたは、テキストだけでなく

let thisUserFavoriteRef = rootRef.childByAppendingPath("users/this users id/favorite") 
+0

私はあなたの言ったことを使用しましたが(snapshot.key) "(snapshot.value)は"すべての辞書 "を印刷した理由は何ですか? – Rioodi

+0

@Rioodi聖なる牛、すみません。私は私の答えにタイプミスした。 .Valueイベントは.ChildAddedであり、printステートメントは正しくありませんでした。私は実際に*仕事*への答えを更新しました。あなたはおそらくオプションのnilのコードを追加する必要があります。let fav = snapshot.value ["favPost"] as?もしそれがなくなる可能性があるならば、ストリング{}。 – Jay

1

あなたは、コードを次のよう試すことができます。 (あなたは、要件に応じて変更することができます。)

ref.observeEventType(.Value, withBlock: { snapshot in 

      //lets consider you have reached up to "favarites" 

     let favarites = snapshot?.value as! [ String : [ String : AnyObject ] ] 

     //In "favarites" array you will get whole list 
     for favarite in favarites 
     { 
      let favPost = favarite.1[ "favPost" ] as? String //to access value part 
      print("\(favPost) Printed" 
     }    
    } 
+0

値がNULLの場合、アプリケーションがクラッシュする可能性があります – Rioodi

+0

解決しても大丈夫ですか?NSNullを最初に確認すると^ – Rioodi

関連する問題