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

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

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

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

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

0回答

939閲覧

uidで紐付けたデータをまとめて表示させる

sam3457

総合スコア52

Firebase

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

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2018/04/12 05:13

編集2022/01/12 10:55

firebaseを使い、collectionviewに投稿画像・投稿主の名前・アイコン画像も三つを一つのセルとして表示する機能を作っています。

現在、三つデータのうちの一つである投稿画像の表示のみができている状態です。下の方にコンソールの画像があります。

投稿画像: Storageに保存した画像のURLをRDBに保存
posts-uid-postID-postimage

投稿主の名前: RDBに以下の様に保存
profs-uid-username

投稿主のアイコン画像: Storageに直接保存
usericons-uid-アイコン画像

以上の様に三つのデータ同士はuidで紐ずいている状態です。

これら三つを一つのセルとして表示するにはまずuidを取得し、そのuidを元に投稿主の名前・アイコン画像を投稿画像にに割り当てる。という手順が必要になると思っているのですが、

投稿画像(posts-uid-postID-postimage)の2階層上であるuidを取得する方法はありますでしょうか?

現在、投稿画像のみが表示できている状態なのですが、どの様な手順でuidで繋がった異なる階層にあるデータ同士をマッチさせるのでしょうか?

また、そもそももっと効率的な方法がある。こういう構造にしたほうがいい。などありましたら一言お教えいただけると幸いです。

イメージ説明

RDB
イメージ説明
Storage
イメージ説明

swift

1import UIKit 2import Firebase 3import SDWebImage 4 5class PostList: UICollectionViewController { 6 7 var posts = [NSDictionary]() 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 12 //ログインチェック 13 if UserDefaults.standard.object(forKey: "check") != nil { 14 //何もしない 15 } else { 16 let loginViewController = self.storyboard?.instantiateViewController(withIdentifier: "login") 17 self.present(loginViewController!, animated: true, completion: nil) 18 } 19 20 loadAllData() 21 22 23 } 24 override func viewWillAppear(_ animated: Bool) { 25 super.viewWillAppear(true) 26 27 loadAllData() 28 } 29 30 @IBAction func loginOrOut(_ sender: Any) { 31 performSegue(withIdentifier: "goLogin", sender: nil) 32 } 33 34 35 //RDBにある投稿画像の参照(URL)を取ってくる 36 func loadAllData() { 37 38 let RDBRef = Database.database().reference().child("posts") 39 RDBRef.queryLimited(toLast: 20).observe(DataEventType.childAdded, with: { (snapshot) in 40 var tempPosts = [NSDictionary]() 41 for post in(snapshot.children) { 42 43 let child = post as! DataSnapshot 44 let dict = child.value 45 tempPosts.append(dict as! NSDictionary) 46 } 47 self.posts = tempPosts 48 self.collectionView?.reloadData() 49 50 }) 51 52 } 53 54 override func didReceiveMemoryWarning() { 55 super.didReceiveMemoryWarning() 56 } 57 58 /* 59 // MARK: - Navigation 60 61 // In a storyboard-based application, you will often want to do a little preparation before navigation 62 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 63 // Get the new view controller using [segue destinationViewController]. 64 // Pass the selected object to the new view controller. 65 } 66 */ 67 68 // MARK: UICollectionViewDataSource 69 70 override func numberOfSections(in collectionView: UICollectionView) -> Int { 71 return 1 72 } 73 74 75 override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 76 return posts.count 77 } 78 79 override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 80 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) 81 82 let dict = posts[indexPath.item] 83 84 //投稿画像(postimageを表示) 85 let postImageView = cell.contentView.viewWithTag(1) as! UIImageView 86 let postStr = dict["postimage"] as? String 87 let postUrl = URL(string: postStr!) 88 postImageView.sd_setImage(with: postUrl) 89 90 //let iconImageView = cell.contentView.viewWithTag(2) as! UIImageView 91 //let nameLabel = cell.contentView.viewWithTag(3) as! UIImageView 92 93 94 95 96 return cell 97 } 98 99 100} 101

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問