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

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

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

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

Xcode

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

Swift

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

Q&A

解決済

1回答

2673閲覧

( Swiftアプリ) Firebaseの updateChildValue が機能しない

masamasamasa

総合スコア95

Firebase

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

Xcode

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

Swift

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

0グッド

0クリップ

投稿2018/11/02 08:24

編集2018/11/02 10:56

##前提
初めてFirebaseを使ってSNSを作成中。
投稿にハッシュタグ機能を付けようとしてます。

##やりたいこと
ハッシュタグを付けて投稿されたWordを、
updateChildValuesを使って、
FirebaseのDatabaseに入れたい

イメージ説明
イメージ説明

##問題点
updateChildValuesが機能しないので、hashTagノードが作られない
![イメージ説明

##code

let words = caption.components(separatedBy: CharacterSet.whitespacesAndNewlines) for var word in words { if word.hasPrefix("#") { word = word.trimmingCharacters(in: CharacterSet.punctuationCharacters) print("---word: (word)") let newHashTagRef = Api.HashTag.REF_HASHTAG.child(word.lowercased()) print("---newHashTagRef: (newHashTagRef)") newHashTagRef.updateChildValues([newPostId: true]) } }

##実際の動作

イメージ説明
イメージ説明
イメージ説明

##開発環境
MacOS Mojave 10.14
Xcode 10.1 (10B61)
Swift 3.0
iOS Development Target 10.1

なぜ機能しないのか全く見当が付きません。
すみませんが、よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

54行目にブレークポイントが設定されていて、57行目で実行が一時停止されているだけということではないのでしょうか?

投稿2018/11/03 15:33

TakeOne

総合スコア6299

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

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

masamasamasa

2018/11/04 00:51

ご回答ありがとうございます。 ブレークポイントを外して試してみたのですが、やはり結果は同じでした。
TakeOne

2018/11/04 01:27 編集

ブレークポイントを外して続行させたら、hashTagに対するwrite権がないとか、何かエラーメッセージが表示されていたりしませんか?
masamasamasa

2018/11/04 01:28

did Finish Picking Media 2018-11-04 10:26:06.313810+0900 lkfdsjdnfdvob[28606:928218] [discovery] errors encountered while discovering extensions: Error Domain=PlugInKit Code=13 "query cancelled" UserInfo={NSLocalizedDescription=query cancelled} 2018-11-04 10:26:27.278932+0900 lkfdsjdnfdvob[28606:928349] [BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C6.1:2][0x7f83bad67b80] get output frames failed, state 8196 2018-11-04 10:26:27.279188+0900 lkfdsjdnfdvob[28606:928349] [BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C6.1:2][0x7f83bad67b80] get output frames failed, state 8196 2018-11-04 10:26:27.279864+0900 lkfdsjdnfdvob[28606:928349] TIC Read Status [6:0x0]: 1:57 2018-11-04 10:26:27.280171+0900 lkfdsjdnfdvob[28606:928349] TIC Read Status [6:0x0]: 1:57 https://train-dbed9.firebaseio.com/posts/-LQRK-k68dY_Pdhd-2NL newPostRefrence----- kJ9l1ztJCTfaG66o7UzItqRmuIz2 currentUserId----- ["Eeee", "", "#eeee"] words----- ---word: eeee ---newHashTagRef: https://train-dbed9.firebaseio.com/hashTag/eeee ---newPostId: Optional("-LQRK-k68dY_Pdhd-2NL") 11111 11111
masamasamasa

2018/11/04 01:30 編集

上記が表示されています。 Postの投稿は正常に機能して、できていないのが newHashTagRef.updateChildValues([newPostId: true]) の一行だけという状態です。
masamasamasa

2018/11/04 01:56 編集

{ "rules": { ".read": "auth != null", ".write": "auth != null", "users": { ".indexOn": ["username_lowercase"] } } }
masamasamasa

2018/11/04 01:56

ルールは上記のようにしているのですが、何か問題ってありますでしょうか?
TakeOne

2018/11/04 03:26 編集

データベースのルールも質問に書かれているコードも問題なさそうに思いますが、1つだけおかしそうに見えるのは10:28のコメント欄に示されているメッセージの中で 「---newPostId: Optional("-LQRK-k68dY_Pdhd-2NL")」 という表示です。 質問のコードにはこのようなメッセージを出力するprintはありませんでしたが、これが質問を書いた後に追加したもので、質問のコードの newPostIdの内容を表示しているものであれば、この変数がオプショナル型になっていることが問題のきっかけになっている可能性があると思います。 このメッセージが質問に書かれているコードのnewPostIdと別のものを表示しているということであれば、質問に書かれているコードのupdateChildValuesの直前に `print(newPostId)`を入れて、書き込み直前のnewPostIdの値を確認してみるべきだと思います。
masamasamasa

2018/11/04 03:34

print("---newPostId: (String(describing: newPostId))") newHashTagRef.updateChildValues([newPostId: true]) print("---newPostId: (String(describing: newPostId))")
masamasamasa

2018/11/04 03:34

---newPostId: Optional("-LQRlZxWU2JLnR7_4Noo") ---newPostId: Optional("-LQRlZxWU2JLnR7_4Noo")
masamasamasa

2018/11/04 03:37

お返事ありがとうございます。 オプショナルのアンラップが必要になるってことでしょうか?
TakeOne

2018/11/04 04:02 編集

確認しました。 Xcode9.4.1ではオプショナル型のStringを辞書のキーに指定すると辞書の作成自体がビルド段階でエラーになるのですが、Xcode10(Swift4.2)ではそれがエラーにならないようです。しかし、オプショナル型のStringをキーにした辞書をupdateChildValuesに指定しても結局Firebaseはうまく処理できないようです。とりあえず「[newPostId!: true]」としてキーをアンラップして辞書を作ればうまくいくと思います。
masamasamasa

2018/11/04 04:23

解決しました! 長くお付き合いいただきありがとうございました。 非常に感謝しています!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問