0
Firebaseを使用したチャット画面があります。私は次のコードを使用しています:Firebaseからのみ新しい値を取得する
ref2.observeEventType(.ChildAdded, withBlock: { snapshot in
let msg = snapshot.value.objectForKey("message")!
self.addMsg(String(msg))
})
func addMsg(m:String) {
txtChat.text = txtChat.text + "\r\n" + m
}
正常に動作しますが、最初にデータベースに接続すると、以前のすべてのメッセージが処理されます。私はそれを修正したいので、彼は部屋にいる間に追加されたメッセージしか見ることができません。
「彼は部屋にいた」とはどういう判断をしましたか? – Jay
データベースに接続した後に新しいメッセージが送信されました。上記のコードはすべての歴史的なメッセージを引き出します。 たとえば、ChrisとJeffはチャットしています。今、Johnはアプリを読み込んでデータベースに接続します。私は彼に、この時点以降にタイプされたものを見てほしい。しかし、プログラムがロードされるとすぐに、すべての以前のメッセージがテキストボックスに追加されます。 – JeffG
最も一般的なアプローチについては、http://stackoverflow.com/questions/18270995/how-to-retreive-only-new-dataを参照してください。しかし、より良い方法は、ユーザが最後に接続された時を追跡し、 'ref.queryOrderedByChild(" timestamp ")を使って新しいメッセージを問い合わせることです。queryStartingAtValue(lastSeenTimestamp)' –