2017-02-12 19 views
0

現在、私はsnapchatのようなクローンを作成していますが、サーバにプルリクエストを送信していますが、ダウンロードに関してはうまくいきません。私は、このようになりますデータベースへの参照を作成しSwiftのFirebaseデータベースクエリの問題

var recievers: FIRDatabaseReference{ 
    return mainRef.child("pullRequests") 
} 

し、私は私が知っているデータを解析するのViewControllerが(これについて移動する最良の方法ではありませんしているが、私はちょうどしようとしていますそれは今働いてもらう)、そこに私はすべてのコンパイル・エラーが届かないが、それはまたrecipientsArrに何も追加されていない、誰もが正しい方向に私を導くことができ、この

DataService.instance.recievers.observeSingleEvent(of: .value) {(recipients: FIRDataSnapshot) in 
     if let recipient = recipients.value as? Dictionary<String,AnyObject>{ 
      var index = 0; 
      for(key,value) in recipient{ 
       index = index+1 
       if let dict = value as? Dictionary<String,AnyObject>{ 
        if let reciever = dict["recipents"] as? Dictionary<String,AnyObject>{ 
         if let num = reciever["\(index)"] as? String{ 
          let uid = num 
          recipientsArr.append(uid) 
          } 
         } 
        } 
       } 
      } 
     } 

    for i in 0...recipientsArr.count{ 
    print(i) 
    } 

がありますか?

私Firebaseは、次のようになります。

答えて

0

スナップショットを正しくデコードしていません。あなたの質問から、あなたが観察したい価値イベントは何ですか?それは追加されたばかりの新しい受信者ですか?全体のプルリクエスト? はあなたがpullRequest参照を観測するため、スナップショットをデコードするためにしているいずれの場合も:

if let pullRequest = recipients.value as? Dictionary<String,AnyObject>{ 
      if let recipientsList = pullRequest["recipents"] as? Dictionary<String,AnyObject>{ 
       for (_, value) in recipientsList { 
        if let uid = value as? String{ 
         recipientsArr.append(uid) 
         } 
        } 
       } 
      } 
+0

私はレシピエントの要素 "tLvt ..."、 "JqIr .."などを読んでレシピエントに入れようとしています。あなたの方法も試してみましたが、結果は同じでした。配列に何も追加されていないようです。 – andrewF

+0

デバッガを実行して、スナップショットのどこでエラーが発生しているのか確認してください。受信者リストの変更を読みたい場合は、これを参照として参照する方がよいでしょう:mainRef.child( "pullRequests")。child( "recipients" ) –

0

問題は、このメソッドは、唯一のデータベースからデータを受け取るために使用されたときに、データベース内の値を更新する方法observeSingleEventを使用していることで、更新されていない。つまり、読み取り専用です。

firebaseデータベースのレコードを更新する方法は、読み取りメソッドとは異なる方法で動作します。 setValueupdateChildValuesの両方の方法を使用して更新を実行できます。どちらもデータベース参照で動作します。

setValueメソッドを使用するには、このような操作を行う必要があります。それは非常によく似た働き、

let previousRecipents = pullRequests.recipents 
let allRecipents = previousRecipents.append(newRecipent) // Assuming preivousRecipents is an array and you have the new Recipent 
recievers.child("recipents").setValue(allRecipents) 

updateChildValuesを使用するには:私はあなたがすでにpullRequestsは、以前のデータベースからあなたがフェッチされた情報から作成したオブジェクトと変数にそれを持っていると仮定します。 https://firebase.google.com/docs/database/ios/save-data

はそれが役に立てば幸い:次のリンクをチェックし、更新する方法の詳細については

let previousRecipents = pullRequests.recipents 
let allRecipents = previousRecipents.append(newRecipent) // Assuming preivousRecipents is an array and you have the new Recipent 
let parametersToUpdate = ["recipents": allRecipents] 
recievers.updateChildValues(parametersToUpdate) 

+0

私は、データベースを更新し、問題を持っていけない、私は、データベースからのUIDののrecipents配列を引く取得しようとしています – andrewF

関連する問題