2016-04-24 1 views
1

In meiner app Ich schicke diese Anfrage:Wie wird die Firebase-Abfrage aktualisiert?

let defaults = NSUserDefaults.standardUserDefaults() 
var time: String? 

if defaults.valueForKey("chatsLoadedTime") != nil { 
    time = "\(defaults.valueForKey("chatsLoadedTime") as! NSDate)" 
} 
chatsRef.queryOrderedByChild("updatedTime").queryStartingAtValue(time).observeEventType(.Value, withBlock: { snap in 

Innerhalb dieser Abfrage i Variable time und ich möchte, aktualisieren Sie diese chatsRef Abfrage aktualisieren, um neuen Wert time zu starten. Wie kann ich das machen?

Meine Struktur ist:

user 
-userID 
--chatRooms 
---chatRoomID 
----updatedTime 
----recieverName 
----lastMes 
----read 
----recieverID 

Ich bin Chatrooms abfragt, wo updatedTime größer als verstrichene Zeit variabel ist. Wenn ich einen Snapshot von Firebase erhalte, aktualisiere ich die variable Zeit und möchte Chats abfragen, wobei updatedTime größer ist als aktualisierte variable Zeit.

+0

Basierend auf der Frage möchten Sie immer nach dem neuesten Beitrag nach Zeit abfragen. eine Abfrage beobachtet den Post-Knoten. Wenn ein Post um 8 erstellt wird, möchten Sie darüber benachrichtigt werden, damit die Abfrage für Posts nach 9 aktualisiert werden kann. Wenn ein Post dann um 9 erstellt wird, soll die Abfrage Posts nach 10 beobachten Ton richtig? – Jay

+0

sieht ähnlich aus. Aber mit einem kleinen Korrekt. "Wenn ein Post um 8 erstellt wird, möchten Sie darüber informiert werden, dann kann die Abfrage für Posts nach 8 (nicht 9 usw.) aktualisiert werden." –

+0

Ich habe meine Antwort aktualisiert, um Ihre Frage besser zu reflektieren. An dieser Stelle scheint es, als ob Sie immer über den letzten (aka letzten) Beitrag informiert werden möchten. Wenn also ein Post um 8 Uhr erscheint, werden Sie über diesen Post benachrichtigt, dann kommt um 08.01 ein weiterer Post, Sie möchten über diesen Post benachrichtigt werden. Dann tritt ein Post um 8:05 Uhr auf, über den du benachrichtigt werden möchtest. Bin ich auf dem richtigen Weg? – Jay

Antwort

2

Es scheint, was Sie fordern

ist Wie abfragen, die ich für alle der chatsRef Kind-Knoten zu einem bestimmten Zeitpunkt beginnen und wann diese Meldung auftritt, stoppen die Zeit beobachtet, erhöht sich die Zeit und achten Sie auf diese Zeit.

Es hilft, wenn wir Ihre Firebase Datenstruktur kennen und was Ihre vollständige Abfrage aussieht, aber es scheint, dass Sie die richtige Richtung:

Angenommen, Sie

chatsRef 
    chat_00 
    updated_time: "03" 
    chat_01 
    updated_time: "07" 
    chat_02 
    updated_time: "02" 

und Ihrer Anfrage eine Struktur haben,

let chatsRef = self.myRootRef.childByAppendingPath("chatsRef") 

chatsRef.queryOrderedByChild("updated_time").queryStartingAtValue("02").observeEventType(.Value, withBlock: { snap in 

    for child in snap.children { 
     if let time = child.value["updated_time"] as? String { 
      print(time) 
     } 
    } 
}) 

werden dadurch alle untergeordneten Knoten zurück um 02 starten, so ist der Ausgang

und alle zukünftigen Hinzufügungen oder Änderungen am vorhandenen Knoten, bei denen die aktualisierte_Zeit 02 oder größer ist, geben die Ergebnisse zurück.

Also, wenn ein Kind wurde zu dem chatsRef Knoten, der updated_time enthalten: „04“, dann würden diese Ergebnisse automatisch

02 
04 
07 

Beachten Sie zurückgeschickt werden, dass .Wert alle untergeordneten Knoten zurückgibt, die das Match Abfragekriterien, so dass Sie über .children iterieren müssen, um jeden Knotenwert zu erhalten.

+0

Sie haben mich falsch verstanden :( Ich möchte queryStartingValue jedes Mal aktualisieren, wenn ich Werte von Firebase erhalte. Ich möchte es auf die aktuelle Zeit setzen. Zum Beispiel: aktuelle Zeit ist 20:00. Ich sende Abfrage: 'Zeit =" 18:00 "; chatsRef.queryOrderedByChild ("updated_time"). QueryStartingAtValue (time) ' Wenn ich Ergebnisse erhalte, aktualisiere ich den Wert' time = "20:00" ' Aber ich erhalte immer noch Ergebnisse um 19:00, weil queryStartingValue nicht ' t aktualisiert. Bur Ich möchte nächste Abfrage beobachten von 20:00, nicht 18:00 –

+0

@TarasNikulin Es ist nicht klar, was Sie meinen, wenn ich Werte von firebase erhalten. In Ihrem Code ist nichts enthalten, dass Sie Werte von anderen als der Abfrage erhalten würden. Auf welche Werte beziehen Sie sich? Können Sie Ihre Firebase-Struktur veröffentlichen? Es gibt einfach nicht genug Informationen in der Frage, um es wirklich zu beantworten. – Jay

+0

Ich habe meine Frage aktualisiert. Hoffe, du wirst es verstehen –