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

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

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

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

Q&A

解決済

1回答

293閲覧

[Firebase][ios][Xcode]RealtimeDataBaseで、リレーション先の値の取得がうまくいかない

masimasi

総合スコア32

Swift

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

0グッド

0クリップ

投稿2018/08/07 00:11

編集2018/08/08 13:14

(復元要請がありましたので復元いたします)

以前にも同じ質問をしたのですが、
https://teratail.com/questions/138971
非同期処理を実施しておらず、
質問以前の段階でしが、
非同期処理を理解できたので(おそらく)
もう一度不明点を整理しました。
仕様
ユーザーは
イベントを投稿して
そのイベントに対してコメントをつけられる。
RealtimeDataBaseには、EventとCommentとして保存される
イベントとコメントはtableviewCellで並ぶ
コメントはイベントと紐づいたものとして取得したい
そんなイメージのアプリです
ツリー

{ Events{ 0{ eventName:"hogehoge" Comments{ 0:true } } 1{ eventName:"hogehoge" Comments{ 1:true 2:true } } } Comments{ 0{ text:"hogehoge" Events{ 0:true } } 1{ text:"hogehoge" Events{ 1:true } } 2{ text:"hogehoge" Events{ 1:true } } } }

前回の質問でアドバイスいただいた非同期処理
コールバックを使った
Eventのみの取得はできるようになりました。
しかし本命である、Eventに紐づいたCommentの取得がうまくできません。
EventのIDを使って、Commnt{Event}を取得したいのですが
うまくいきません。
CommentManager.swift

import UIKit import Firebase class CommentManager: NSObject { static let sharedInstance = CommentManager() //ここでエラーが出てしまう var comments: [Comment] = [] var items = [NSDictionary]() var getEventID: String init(getEventID: String) { self.getEventID = getEventID } func fetchComments(callback: @escaping () -> Void) { let firebase = Database.database().reference(fromURL: "hogehoge").child("Events") var tempItems = [NSDictionary]() firebase.child(getEventID).child("Comments").observe(.value){ (snapshot,error) in for item in (snapshot.children){ let key: String = (item as AnyObject).key firebase.child("Comments").child(key).observe(.value){ (snapshot,error) in let value = snapshot.value as? NSDictionary tempItems.append(value!) } } self.items = tempItems self.items = self.items.reversed() callback() } } }

CommentListViewController.swift

import UIKit import Firebase class CommentOfEventListViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { let commentManager = CommentManager.sharedInstance var getEventID = String() 省略 override func viewDidLoad() { super.viewDidLoad() commentManager.items = [NSDictionary]() 省略 commentListTable.delegate = self commentListTable.dataSource = self getCommentsRdbData() commentListTable.reloadData() } func numberOfSections(in tableView: UITableView) -> Int{ return 1 } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { //return 10 return commentManager.items.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "commentCell", for: indexPath) cell.selectionStyle = UITableViewCellSelectionStyle.none let dict = commentManager.items[(indexPath as NSIndexPath).row] let commentTextView = cell.viewWithTag(1) as! UITextView commentTextView.text = dict["text"] as? String return cell } func getCommentsRdbData(){ UIApplication.shared.isNetworkActivityIndicatorVisible = true //getEventIDをCommentManager.swiftのinitに渡したい let comment = CommentManager(getEventID: getEventID) //comment.fetchComments() //getEventIDを渡しながらコールバックしたいのですが・・・書き方がわからない commentManager.fetchComments { () in self.eventListTable.reloadData() } UIApplication.shared.isNetworkActivityIndicatorVisible = false } }

CommentListViewController.swiftにEventIDは渡せているので
それをCommentManagerにわたして
紐づいたCommentを見つけたいです。
アドバイスよろしくお願いします

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

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

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

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

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

fuzzball

2018/08/08 07:36

どのような不備があったのかを書いて自己解決にすればいいのでは?
masimasi

2018/08/08 07:49

なるほど、そうします。ご指摘ありがとうございます
guest

回答1

0

自己解決

盲信的にVCと分けようとしてましたが、みなさん分けてないのですね。
レベルの低い質問になってしまいお恥ずかしいです。
いったんこれで閉じさせてください。

ありがとうございました

投稿2018/08/08 07:30

編集2018/08/08 13:18
masimasi

総合スコア32

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問