2016-04-23 61 views
3

iOSアプリケーションにチャットロジック1-1を実装しています。私はfirebaseを使ってチャットやメッセージをチャットに保存しています。メッセージはうまくいっています。しかし、チャットリストにはいくつかの問題があります。 保存されたチャットの私の構造は、私はNSUserDefaults NSDate値「chatsLoadedTime」に格納このSwiftとFirebaseを使用したチャットアプリケーションのロジック

-Users 
--UserID 
---chatrooms 
----chatroomID 
-----updatedTime 
-----deleted 
-----read 
-----receiverID 
-----receiverName 

のように見えます。私は、送信クエリでチャットを照会:

var time: String? 
if defaults.valueForKey("chatsLoadedTime") != nil { 
    time = "\(defaults.valueForKey("chatsLoadedTime") as! NSDate)" 
} 
chatsRef.queryOrderedByChild("createdTime").queryStartingAtValue(time).observeEventType(.Value, withBlock: { snap in 
    defaults.setValue(toLocalTime(NSDate()), forKey: "chatsLoadedTime") 
and so on 
. 
. 
. 

私の知る限り見ることができるように、それがチャットを保存し、異なるデバイスからチャットをダウンロードできるようにするための良い方法です。たとえば、アプリをインストールしたばかりで、chatsLoadedTimeの値がnilであれば、すべてのチャットをダウンロードし、この値を現在のdateTimeに更新します。新しいチャットが作成された場合、そのcreatedTimeはmy chatsLoadedTimeの値より大きくなり、アプリはそれをダウンロードします。

しかし、チャットを削除するための効率的な方法を実装する方法はわかりません。私はこの論理を望んでいます:user1がチャットを削除した場合、彼は単に値を変更しました= deletedを削除しました。 2人目のユーザーがこのチャットを削除した場合、チャットとメッセージはアプリから完全に削除されます。 user1がチャットを削除してuser2を削除した場合、user2がuser1に書き込むと、user1はこのメッセージと前のすべてのメッセージを受信します。これはメッセージが削除されなかったためです。しかし、それは最高の論理ではないかもしれません。私に、最高のやり方でこれを行う方法をアドバイスしてください。

可能であれば、私は複数の値を照会したいと思いますが、私が知る限りそれは不可能です。

+0

削除以外はすべてがうまくいっているようですね?各UserID内にdeletedChatsノードを追加できます。チャットが削除されたときに書き込みchatroomID:各ユーザーのUserId/deletedChatノードに適用されます。別のユーザーがチャットを削除すると、そのノードにchatroomIDが存在するかどうかを照会し、チャットを完全に削除します。そうでなければ、chatroomID:trueを設定してください。 – Jay

+0

それは長くなるようです。 user1がチャットを削除した後、user2がuser1に書き込みを行うとどうなりますか?次に、クエリを送信し、スナップショットを受信し、user2にdeletedChatノードがあるかどうかを確認する必要があります。彼がしている場合は、私はこのノードを削除する必要がありますしない場合は、次に書き込みます。 –

+0

おそらく私は解決策を作成しました。私は後で答えます: –

答えて

0

すべてのチャットルームにupdatedTimeという値を追加しました。そして、lastLoadedTimeという名前のデバイスに値を追加しました。 firebaseからスナップショットを受け取るたびに、lastLoadedTimeを現在時刻に更新します。だから、デバイスに保存されている時間値がfirebaseのchatRoomのupdatedTimeより小さいチャットを観察します。チャットを削除すると、更新された時間は1990-01-01 00:00:00に設定されます。だから私は誰かが私にメッセージを送るまでこのチャットを観察しません。あなたが理解するために多くの情報が必要かどうか私に尋ねてください:)

+0

あなたの答えをあなたのコードを共有してください?素晴らしいでしょう! – MJQZ1347

関連する問題