前提・実現したいこと
firestoreとMessageKitを使って、リアルタイムチャットアプリを作ろうとしています。言語はswiftです。初心者です。
メッセージ表示画面で、チャット相手のメッセージをリアルタイムで反映させるにはaddSnapshotListenerを用いる必要があるかと思うのですが、疑問が三つあります。
- リスナーを使うと、collectionに変更が加えられた際、その関数が再び走るという理解でよろしいでしょうか。
→ 下のコードでいうと更新されるたびにhogehogeの部分が実行されるのでしょうか。
- 以下の書き方では、コンソールから直接messagesに新しいメッセージを追加しても、シミュレータの画面に反映されない。
→ すなわちこの書き方ではマズイのでしょうか
- リスナーをviewwilldisapear等で閉じる必要があるかと思うのですが、その方法が具体的に分かりません。
→ 「listner = db.coll~~addSnapshotListenerとし、listener.remove()で閉じる」と公式ドキュメントには書いてるのですが、getMessage()で定義したlistenerを別関数で呼び出せるのでしょうか
該当のソースコード
swift
1override func viewDidLoad() { 2 super.viewDidLoad() 3 4 //この書き方やとリッスンされない?? 5 self.getMessage() 6} 7 8//最新メッセージ20個とる 9func getMessage() { 10 //messages以下にsubcollectionとしてmessage(text,time,sender)がそれぞれ入ってます 11 db.collection("messages").order(by: "time", descending: true).limit(to:20).addSnapshotListener { (snapshot,err) in 12 13 hogehoge 14 15}
まとめ
以上長くなりましたがよろしくお願いします。
また、全問分からずとも一問でもいいですのでご回答よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/19 16:53