質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

1261閲覧

FirebaseRealtimeDatabaseから異なる階層を参照してリッスンするには

rainyeveryday

総合スコア22

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/05/02 07:03

前提・実現したいこと

Firebase Realtime Databaseの初心者です。
Firebase Realtime Database からデータをフェッチしてUITableViewに表示したいと考えています。

発生している問題

次の三点を中心としたアドバイスをいただきたいです。
① 以下のコードで、写真のusersから数えて2段目の階層のデータ(furigana,name)を取得できましたが、階層がもう一段下、3段目にあるデータ(applyDate, bookingDate)を取得するにはどうすれば良いのでしょうか。
② 私はuserIDを振っているので、user.idの子をリッスンしてデータを取得するためにDatabase.database().reference().child("users").child(user.id)と表記しリッスンして①を試してみました。このuser.idのuserはAuth.auth().currentUserを代入していますが、この.currentUserは全てのユーザーを示しているのでしょうか。userIDは一意なので、user.idで参照することはできないと思い、この様に至りました。
③ user.idの子をリッスンしてデータを取得するには②の表記で良いのか、違う場合はどの様に表記すれば良いのかご教示お願いします。

該当の写真とコード

イメージ説明

swift

1 refUserInfo = Database.database().reference().child("users") 2 refUserInfo.observe(.value) { [weak self](snapshot) -> Void in 3 if snapshot.exists() { 4 for userSnapshot in snapshot.children { 5 let userSnap = userSnapshot as! DataSnapshot 6 let dict = userSnap.value as! [String: AnyObject] 7 let name = dict["name"] as! String 8 let furigana = dict["furigana"] as! String 9 let applyDate = dict["applyDate"] as! Double] 10 //convertTimestampでapplyDateをDate型、そしてString型に変換 11 let applyDateString = convertTimestamp(timestamp: applyDate) 12 let bookingDate = dict["bookingDate"] as! String 13 //UserInfoClassはUITableViewCellに入れるデータのカスタムクラス 14 let info = UserInfoClass.init(name: name, furigana: furigana, bookDate: bookingDate, applyDate: applyDateString) 15 //userInfoはUserInfoClass型の配列 16 self?.userInfo.append(info) 17 self?.InfoTableView.reloadData() 18 } 19 }

自分で調べたことや試したこと

もう一段下げてfor文で取り出したらいけるのかと思い、試しましたが、予想通りうまくいきませんでした。
また、refUserInfoでもう一段下げて(refUserInfo = Database.database().reference().child("users").(user.uid).child("applyDate")(bookingDateも同様に))試しましたが途中でCould not cast value of type '__NSCFNumber' (0x1e437eae0) to 'NSDictionary'というエラーが出ました。以下のサイトを参考にしましたが、Database からのデータの取得についてはっきりと理解していない状態です。
https://stackoverflow.com/questions/56420640/swift-firebase-get-values-in-children

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問