0

データベースから現在のユーザーの値(取得しやすいユーザー名とユーザーID以外)を取得する方法を教えてください。iOS Swift:現在ログインしているユーザーのデータベースからエントリを取得します。

次のように皮肉なことに、私は値を設定することができますし、それがうまく動作します:

let databaseRef = FIRDatabase.database().reference() 
userID = (FIRAuth.auth()?.currentUser?.uid)! as String 
databaseRef.child("users").child(userID!).child("TermCond").setValue("Yes") 

しかし、私は単純に電流を取得したい場合は私の人生のために私はsetValueの代わりに置くために何かを動作することはできませんTermCond値。私は十分であろう

let DesiredValue = databaseRef.child("users").child(userID!).child("TermCond").value as? String 

に例えばとしてvalueを使用して思ったが、何も働きません。値を取得するのがなぜそれを設定するよりも難しいのだろうと私は混乱しています。

+1

ここに記載されているように、値イベントを監視する必要があります:https://firebase.google.com/docs/database/ios/read-and-write#listen_for_value_events –

答えて

2

Firebaseから値を読み込むには、値が変更されるたびに呼び出される参照リスナーを追加する必要があります。あなたのケースでは

、そのようなものが考えられます。このコードブロックは、たびあなたの値の変化を引き起こしてしまいます

let databaseRef = FIRDatabase.database().reference() 
databaseRef.child("users").child(userID!).child("TermCond").observe(FIRDataEventType.value, with: { (snapshot) in 
    let desiredValue = snapshot.value as? String 
}) 

。一度だけ読みたい場合はobserve:withの代わりにobserveSingleEvent:of:withを使用できます。

Firebase文書で説明したようにこれは次のとおりです。https://firebase.google.com/docs/database/ios/read-and-write

私はあなたはそれが従来のデータベースとは非常に異なっているとして、どのようにFirebase作品のアイデアを得るためにDocumentationその全体を読むことをお勧めします。 https://www.raywenderlich.com/139322/firebase-tutorial-getting-started-2私は今、これを解決してきました

+0

ありがとう、これは非常に役に立ちました。私は私の問題を解決することができました!私が勉強するリンク、特にSwift 3以降もありがとうございます。 – AJGronevelt

+1

@AJGroneveltあなたは大歓迎です!一般的に、私は最新のiOS、Swift、Xcodeの最新版を常に最新の状態に保っているので、Ray Wenderlichのチュートリアルをお勧めします。また、多くのトピックを優れた読みやすさで詳細にカバーしています。また、Firebaseを実際に学ぶことに興味がある場合に役立つFirebaseのチュートリアルがいくつかありますが、メッセージングアプリケーションの作成などに特化していますが、FirebaseのWebサイトで検索してください。 – Aleksander

0

(アレクサンダーの回答に基づいて):あなたはFirebaseデータベースについてもう少し、それがどのように動作するかを学ぶしたい場合

は、私はまた、次のチュートリアルをお勧めすることができます。私がやったやり方は次の通りです。

databaseRef.child("users").child(userID!).observeSingleEvent(of: .value, with: { (snapshot) in 
     let value = snapshot.value as? NSDictionary 
     self.desiredValue = value?["TermCond"] as? String ?? "" 
     self.LabelToShow.text = self.desiredValue! 
    }) { (error) in 
     print(error.localizedDescription) 
} 

これは絶対にうまく動作し、TermOSCondoの値を自分のiOSのLabelToShow画面に表示します。

+1

@アレクサンダー私は気付かなかった、申し訳ありません。あなたの答えを受け入れました! – AJGronevelt

関連する問題