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

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

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

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

iOS

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

Xcode

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

Swift

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

Q&A

解決済

1回答

273閲覧

Firebase 値が揃っていないユーザーを取得しない方法

Daibaku

総合スコア19

Firebase

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

iOS

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

Xcode

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

Swift

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

0グッド

0クリップ

投稿2017/12/10 17:35

編集2017/12/10 17:37

現在、FIREBASEから全ユーザーの情報を取得しTableviewに表示しています。
そのために、このようなModelを作成しました。

import Foundation import Firebase import FirebaseDatabase struct User { var username: String! var email: String? var country: String? var photoURL: String! var ref: FIRDatabaseReference? var key: String? init(snapshot: FIRDataSnapshot){ key = snapshot.key ref = snapshot.ref username = (snapshot.value! as! NSDictionary)["username"] as! String email = (snapshot.value! as! NSDictionary)["email"] as? String country = (snapshot.value! as! NSDictionary)["country"] as? String photoURL = (snapshot.value! as! NSDictionary)["photoURL"] as! String } }

そして下記のようにデータをFetchしました。

var usersArray = [User]()  func fetchUsers(){ dataBaseRef.child("users").observe(.value, with: { (snapshot) in var results = [User]() for user in snapshot.children { let user = User(snapshot: user as! FIRDataSnapshot) if user.uid != FIRAuth.auth()!.currentUser!.uid { results.append(user) } } self.usersArray = results self.tableView.reloadData() }) { (error) in print(error.localizedDescription) } }

データの取得は成功するのですが、私のしたいことはphotoURLは違うVIEWから他の要素とは別のタイミングで入力されたものを使用したいです。例えばphotoURLはVIEW1でその他はVIEW2で入力してもらう形をとり、func fetchUsers()を呼ぶ際にnodeがこのようになっていたとします。

"User": { "uid1": { "username": "some text", "email": "some text", "country": "some text", "photoUrl": "some text" }, "uid2": { "username": "some text", "email": "some text", "country": "some text", "photoUrl": "some text" }, "uid3": { "username": "some text", "email": "some text", "country": "some text", } }

この場合、uid3にphotoUrlがまだ入力されていない状態になっているのでuid3を飛ばしてuid1とuid2のみをTableviewに表示することは可能でしょうか?
可能であればどのような流れになるのかご教示いただけますとありがたいです。
よろしくお願い申し上げます。

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

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

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

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

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

guest

回答1

0

ベストアンサー

いくつか方法があります.

まずはクエリで絞る方法.
各uidの内側に"hasPhotoUrl": "true"などと追加しておきます.

それから保存場所を変える方法.
photoUrlのないユーザを別の場所に保存しておきます.

あるいは取得後に確認する方法.
for内でphotoUrlがあるかどうか判定します.

投稿2017/12/10 18:34

Yatima

総合スコア1159

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

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

Daibaku

2017/12/11 06:47

解答ありがとうございます! 1つ目を実装したいと思うのですがその場合は ``` usersRef.queryOrderedByChild("photoUrl").queryEqualToValue("true") .observe ``` このような形でよろしいのでしょうか? それとも私の場合ではqueryOrderedByKeyでしょうか? よろしくお願い致します。
Yatima

2017/12/11 07:12

queryOrderedByChildのはずです.ご確認ください. ちなみにphotoUrlのほうは具体的なURLではありませんか? また別に子を作る必要があります.
Daibaku

2017/12/11 07:24

ありがとうございます! 具体的なURLです。 photoUrlの子を作ってqueryOrderedByChildでクエリする形でよろしいでしょうか?
Yatima

2017/12/11 08:02 編集

photoUrlやusernameと同じレベルにhasPhotoUrlを置くのがいいのではないでしょうか.
Daibaku

2017/12/11 08:53

なるほど、実装してみます! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問