2016-09-11 14 views
0

私はFirebaseの新種です。私は私の小さなプロジェクトの1つでそれを使用しています。ユーザーが登録してその情報を追加するときに、dbのユーザーノードを作成します.UIDはオブジェクトのIDです。それは次のようになります。Firebaseが最初の値としてnullを返す

users 
    $uid 
     email = "[email protected]" 

私はいくつかのもののXcodeのプリントが結果を、以下のうちの更新/追加するには、そのノード上のトランザクションブロックを実行してみてください。これを辞書にキャストすることはできないので、コードは失敗します。私がファイアベースからデータをエクスポートしようとすると、ヌル値はありません。私は数字のidsが使用されているときにこれに似た質問を見ましたが、ここではそうではありません。私は何が間違っているのか分かりません。 すべてのヘルプは高く評価され...

Optional(<null>) 
Optional({ 
    email = "[email protected]"; 
}) 
+0

私はrunTransactionBlockメソッドを使用していました。このメソッドは複数回呼び出されます。私が適切に処理すると、私は自分のデータを保存することができました。 – user35012

+0

あなたの問題を解決した場合、私の答えを受け入れてください(私の答えの左上にチェックマークを入れてください)。私は複数のオプションを提案しました。 :)ハッピーコーディングhttp://stackoverflow.com/help/someone-answers – Dravidian

+0

@ user35012あなたはこれに任意の解決策を見つけましたか?私は同じ問題に直面しています。 –

答えて

0

あなたはこのノードにデータを追加したい場合は: -

let dbRef = FIRDatabase.database().reference().child("users").child(FIRAuth.auth()!.currentUser!.uid) 
  • あなたはNSMutableDictionaryとしてあなたsnapshot.valueを取得してそれを行うことができます。

    dbRef.child("email").observeSingleEventOfType(.Value, withBlock: {(list) in 
    
          if let listDict = list.value as? NSMutableDictionary{ 
    
           listDict.setObject(newValue, forKey: newKey) 
           dbRef.setValue(listDict) 
    
          } 
    

、あなたのデータを更新したい場合は次のいずれかを実行します -

  • ランtransactionBlock: -

    dbRef.child("email").runTransactionBlock({ (data: FIRMutableData) -> FIRTransactionResult in 
         // Set value and report transaction success 
        data.value = "[email protected]" 
        return FIRTransactionResult.successWithValue(data) 
          }) { (error, committed, snapshot) in 
          if let error = error { 
           print(error.localizedDescription) 
           } 
         } 
    
  • 更新値: -

     dbRef.updateChildValues(["email" : "[email protected]"]) 
    
関連する問題