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

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

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

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

Swift

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

Q&A

解決済

1回答

428閲覧

swift firebaseのデータ配列をテーブルに入れたい

pokerStars

総合スコア67

Firebase

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

Swift

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

0グッド

0クリップ

投稿2019/02/14 06:02

編集2019/02/15 08:00

このような感じで、firebaseに保存しているデータを一つのセルごとに取り出したいです。
イメージ説明

名前を一つずつ入れたい場合どのようにすればいいのでしょうか?
現状の保存データはこんな感じです。
イメージ説明

#やってみたこと

import UIKit import Firebase import FirebaseDatabase import FirebaseAuth class usersViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { @IBOutlet weak var tableView: UITableView! let ref = Database.database().reference() var roomArray = [String]() override func viewDidLoad() { super.viewDidLoad() tableView.delegate = self tableView.dataSource = self } func users(){ ref.child("Users").observeSingleEvent(of: .value, with: { (snapshot) in // Get user value let value = snapshot.value as? [String:NSDictionary] for key in value!.keys.sorted() { //snap : 階層下のデータを書くのすいた辞書 //今回なら、snap = ["RoomName":"はわはわ"] let snap = value![key] if let roomname = snap!["名前"] as? String { self.roomArray.append(roomname)} } } )} func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return roomArray.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "date", for: indexPath) cell.textLabel?.text = roomArray[indexPath.row] return cell } }

配列の取り出しはできたのですが、テーブルに表示したいです

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

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

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

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

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

guest

回答1

0

ベストアンサー

for names in roomArray{

print(names) }

で出力している位置が悪いです。
for key in ループの外で出力すれば期待通りになっていることが判るかと思います。

投稿2019/02/14 08:10

takabosoft

総合スコア8356

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

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

pokerStars

2019/02/14 08:35 編集

できました! 配列は綺麗にできたのですが、これをテーブルに1つずつ出力する方法がわからないです。
takabosoft

2019/02/14 09:00

雰囲気だけだと、以下のような感じです。 ●現状 for key in value!.keys.sorted() { .... for names in roomArray{ print(names) } } ●ループの外でroomArrayをprint for key in value!.keys.sorted() { .... } for names in roomArray{ print(names) }
pokerStars

2019/02/15 03:08

ss aaaaa abcという風に出力することはできたのですが、これをtableのセルごとに名前を出力する方法がわからないです泣
pokerStars

2019/02/15 04:16 編集

上記コードを編集しました。 テーブルのセルに名前を入れたいのですが、これだと入らないです。
pokerStars

2019/02/15 04:17 編集

どこかおかしいところはありますでしょうか?
takabosoft

2019/02/15 06:29

viewDidLoadの中にobserveSingleEventを書いても、おそらくwithの中のブロックが呼ばれるタイミングは後になると思います(裏で通信して読み込みが終わった段階でwithの中のブロックが呼ばれるはず)。 なので、テーブルに表示すべきデータが揃った時点でreloadDataを実行してください。
pokerStars

2019/02/15 07:53

viewDidLoadの外で ref.child("Users").observeSingleEvent(of: .value, with: { (snapshot) inを書くと、 Expected declarationというエラーを吐いてしまうのですが、テーブルに表示すべきデータが揃った時点でreloadDataを実行する方法がわからないです。
pokerStars

2019/02/15 07:57

関数の中で書くとエラーが治りました!
pokerStars

2019/02/15 08:00

最後にviewdidLoadに何を書けばいいのでしょうか?
takabosoft

2019/02/15 08:48

observeSingleEvent自体はviewDidLoadの中に書いても問題ないですよ。
pokerStars

2019/02/17 11:29

返信遅れてしまい申し訳ありません! self.tableView.reloadData()を入れると解決することができました!! 本当にありがとうございます!
pokerStars

2019/02/17 12:45 編集

もう一つなのですが、今、名前は取り出すことができたのですが、年齢や職業も一緒に取り出したいのですが取り出しかたがわからないです汗
takabosoft

2019/02/18 07:52

別の質問は別で立ててください(キリが無さそうなので)
pokerStars

2019/02/18 07:57

わかりました!ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問