swiftでfirebaseを用いたチャットアプリを作ってます。
結論から述べるとfirebase自体は使えていて、コレクションとドキュメントも作成でき、そこに保存もできていますが、サブコレクションの追加ができません。
コード自体は何度も確認しており、おそらく正しいと思います。(実際に実行もできており、実行時エラーもありません。
色々調べてみましたが、初学者ゆえ分かりませんでした。
何日も同じところで躓いていて、困っております。
どなたかお力添えしていただけたら幸いです。よろしくお願いします。
実際のコードとfirebaseの画面、実行時のログを添付します。
追加
最新追加
よくあるのが、セキュリティルールの未設定です。
それはどうなっているでしょうか?
確かサブコレクションのセキュリティルールを書いてないと、
親コレクションのルールで書き込み許可としていてもできなかったと思います。
お忙しい中ご回答ありがとうございます。新しい画像を追加しました。自分でも調べてみますが、もしよければお力添えしていただけると幸いです!!
セキュリティルールは大丈夫?そうですね。
そもそもコンソールにprint("test")のtestが出力されていませんが、、、
そこが問題なのでは?(ボタンのタップ)
回答ありがとうございます。
分かりにくくて申し訳ございません。この画像にはないですが、testは問題なく表示されています。むしろtestとしか表示されない状態です(後から追記したコードです。)
実行した時の、ログが出力されているコンソールを添付しないと情報としては無意味だと思いますが、、、。
また、test以外が表示されないということであれば、
guard節で早期終了してしまっていることが考えられます。
guard let xxx = xxx else {
print("早期リターン1")
return
}
のように、プログラムを噛み砕き
流れをきちんと追ってみてください。
ご回答ありがとうございます。
guard let name = user?.username else
ここの部分で終了していることが判明しました。
自分でも考えてみます。
userの取得をどこで行なっているのかわかりませんが、
nilなので、そこを解決すれば、firestoreに書き込みできると思います。
度々すいません。情報をfetchしてる部分で
guard let dic = snapshot.data() else { print("203")
return
}
この部分がnilであることがわかったのですが、なぜここがnilなのか分かりません、教えていただけるとありがたいです。よろしくお願いします。
また、snapshot自体はnilではなく、printで確認したところ、<FIRDocumentSnapshot: 0x600001eedb00>という値が出力されました。
情報をfetchする時点でのコレクションのスペルが間違っていました。
そこを修正したところ解決しました。本当に困っていたのですごく助かりました。
ありがとうございます。
ここは大丈夫だという思い込みはよくあるので、
期待通り動かない時は、どこまでは動いているか
printなどできちんと順を追う事が大事になります。
解決してよかったですね。
とっても勉強になりました。本当にありがとうございました。
回答1件
あなたの回答
tips
プレビュー