2016-04-25 21 views
2

私は辞書の各項目を別々のラベルに並べ替えようとしています(私の例では、firebaseの投票は "votelabel"の指定、 "textlabel"のテキスト...)このようにするが、私は本当に株式を取得する。私はすべてのポストが新しいキーを持っていると私は子供ここに私は本当に迷子から辞書をFirebase Swiftから取得

var posts: [String: AnyObject] = [String: AnyObject]() 

@IBAction func save(sender: AnyObject) { 
    let titre = Titre.text 
    let soustitre = SousTitre.text 
    let text = Text.text 


    let newPosts: Dictionary<String, AnyObject> = [ 
     "titre": titre!, 
     "soustitre": soustitre!, 
     "text": text!, 
     "votes": votes 
     ] 



    ref.childByAppendingPath(current).childByAppendingPath("Posts").childByAutoId().setValue(newPosts) 
    ref.childByAppendingPath(current).observeEventType(.ChildAdded, withBlock: { snapshot in 
     print(snapshot.value) 

に直接アクセスする方法がわからないので、私の問題は、私はチュートリアルのこの部分を見つけるが、ことだと思います正直、私はそれを得ていませんでした。

 var posts = [NSDictionary]() 
     for item in snapshot.children{ 
      let child = item as! FDataSnapshot 
      let dict = child.value as! NSDictionary 
      posts.append(dict) 
     } 

     self.TextLabel.text = snapshot 
    }) 

} 

任意のヒントは非常に便利です!

お時間をいただきありがとうございます。

FireBase

答えて

2

あなたFirebase構造は、ポスト・ノードのすべてを読み、自分の子供を表示するには、この

​​

といくつかのコードのように見えることを考えます。スナップショットは、キーのセットを返しますので、

let myRootRef = Firebase(url:"https://jaytest.firebaseio.com") 
let postsRef = myRootRef.childByAppendingPath("posts" 

postsRef.observeSingleEventOfType(.Value, withBlock { snapshot in 

    for child in snapshot.children { 

    if let title = child.value["title"] as? String { 
     print(title) 
    } 

    if let text = child.value["text"] as? String { 
     print(text) 
    } 

    if let title = child.value["vote"] as? String { 
     print(vote) 
    } 

    } 
} 

出力は少しより多くの情報に基づいて

some title 
some text 
some vote 
another title 
another text 
another vote 
yet another title 
yet another text 
yet another vote 

ある値にアクセスするためのキーを使用して値のペアを、質問は次のとおりです。

Firebaseの投稿から特定の子データを取得する方法を教えてください。

私たちの投稿をリストしたテーブルビューがあるとします。各投稿のキー(node_0、node_1 & node_2)は、tableView(データソースとして使用可能)と一致する配列に格納する必要があります。

ユーザーが行1、行1をクリックまたはタップすると、配列内のデータこの場合、彼らはのtableViewの行1をタップすると仮定します。

するvar theKey = myarrayの[1]「node_1の」

と呼ばれるキーを返します//今、私たちは鍵を持っていること、Firebaseからデータを取得することです'snap'

postsRef = rootRef.childByAppendingPath("posts") 
thisPostRef = postsRef.childByAppendingPath(theKey) 

thisPostRef.observeSingleEventOfType(.Value withBlock { snapshot in 
    let title = snapshot.value["title"] //title = another title 
    let text = snapshot.value["text"] // text = another text 
    let vote = snapshot.value["vote"] //vote = another vote 
} 
+0

は、あなたのこの答えをありがとう、私はこれを行うために取得んだけど、特定のノードにアクセスしたいです(それは選択されたノードのnodeIDに応じて変化します)、そのノードでは別の子を習得できるようにしたいと考えています。選択した投稿に応じてKeyを変更する変数を取得することは可能ですか?パスを取得できるようにするために、または他の方法でそれを行う必要がありますか? –

+0

@PierreDepingon私は完全に質問を理解するか分からない。私はあなたが求めているものは何かと思います。ユーザが(ui内の)投稿を選択した場合、Firebaseからその子データを取得したいと思っていますか? – Jay

+0

申し訳ありません、はい、それはまさにです! –

0

さらに、あなたの質問で並べ替えについて質問しました。そのために、データベース参照のクエリを取得することができます。たとえば:

postsRef = rootRef.childByAppendingPath("posts") 
let orderedQuery = postsRef.queryOrdered(byChild: "votes") 

そして、あなたのオブザーバーのための参照の代わりにクエリを使用することになり

orderedQuery.observeSingleEventOfType(.value, with: { (snapshot) -> Void in 
// ... 
関連する問題