2016-04-22 7 views
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 
} 

正常に動作しますが、最初にデータベースに接続すると、以前のすべてのメッセージが処理されます。私はそれを修正したいので、彼は部屋にいる間に追加されたメッセージしか見ることができません。

+0

「彼は部屋にいた」とはどういう判断をしましたか? – Jay

+0

データベースに接続した後に新しいメッセージが送信されました。上記のコードはすべての歴史的なメッセージを引き出します。 たとえば、ChrisとJeffはチャットしています。今、Johnはアプリを読み込んでデータベースに接続します。私は彼に、この時点以降にタイプされたものを見てほしい。しかし、プログラムがロードされるとすぐに、すべての以前のメッセージがテキストボックスに追加されます。 – JeffG

+0

最も一般的なアプローチについては、http://stackoverflow.com/questions/18270995/how-to-retreive-only-new-dataを参照してください。しかし、より良い方法は、ユーザが最後に接続された時を追跡し、 'ref.queryOrderedByChild(" timestamp ")を使って新しいメッセージを問い合わせることです。queryStartingAtValue(lastSeenTimestamp)' –

答えて

0

新しいクライアントが接続されたときにデータベースを読み込む前に、データベースをクリアすることにしました。そうすれば、彼らは古いメッセージを受け取ることはなく、接続した後にタイプされたものだけを得ることになります。

let profile = ref3.ref.childByAppendingPath("mainChat") 
profile.removeValue() 
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 
} 
関連する問題