Swift 如何更新firebase查询?

Swift 如何更新firebase查询?,swift,firebase,firebase-realtime-database,Swift,Firebase,Firebase Realtime Database,在我的应用程序中,我将发送以下查询: let defaults = NSUserDefaults.standardUserDefaults() var time: String? if defaults.valueForKey("chatsLoadedTime") != nil { time = "\(defaults.valueForKey("chatsLoadedTime") as! NSDate)" } chatsRef.queryOrderedByChild("updatedT

在我的应用程序中,我将发送以下查询:

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
在这个查询中,我更新变量
time
,我想更新这个
chatsRef
查询,从新值
time
开始。我该怎么做

我的结构是:

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

我正在查询聊天室,其中UpdateTime大于传递的时间变量。当我从firebase收到快照时,我会更新可变时间,并希望查询聊天记录,其中UpdateTime大于updated variable time。

您所要求的似乎是

如何查询在特定时间开始的所有chatsRef子节点,以及当该通知发生时,停止观察该时间,增加时间并观察该时间

如果我们了解您的Firebase数据结构和完整查询的外观,这会有所帮助,但您的方向似乎是正确的:

假设你有一个结构

chatsRef
  chat_00
    updated_time: "03"
  chat_01
    updated_time: "07"
  chat_02
    updated_time: "02"
你的问题呢

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)
        } 
    }
})
这将返回从02开始的所有子节点,因此输出为

02
07
如果更新的_时间为02或更大,则将来对现有节点的任何添加或更改都将返回结果

因此,如果将一个子节点添加到包含更新时间“04”的chatsRef节点,则这些结果将自动返回

02
04
07

请记住,.Value返回与查询条件匹配的所有子节点,因此您需要通过.children对它们进行迭代以获得每个节点的值。

您误解了我的意思:(我想在每次从firebase接收值后更新queryStartingValue。我想将其设置为当前时间。例如:当前时间是20:00。我发送查询:
time=“18:00”;chatsRef.queryOrderedByChild(“更新的时间”)。queryStartingValue(时间)
当我收到结果时,我更新值
time=“20:00”
但我仍将在19:00收到结果,例如,因为queryStartingValue未更新。但我希望下一次查询从20:00开始观察,而不是18:00:00@TarasNikulin不清楚“当我从firebase接收值时”是什么意思。在代码中,除了查询之外,您不会从中接收值。哪些值是你指的是?你能发布你的Firebase结构吗?问题中没有足够的信息来真正回答这个问题。基于这个问题,你总是希望按时间查询最新的帖子。例如,一个查询正在观察帖子节点。当在8点发帖子时,你希望得到通知,这样查询就可以更新为观察9之后的帖子。然后,当在9时发布帖子时,您希望查询在10之后观察帖子。这听起来正确吗?看起来类似。但带有一个小的“正确”。当在8时发布帖子时,您希望收到通知,这样查询就可以更新为在8之后观察帖子(而不是9,等等)我更新了我的答案,以更好地反映您的问题。不过,在这一点上,您似乎总是希望收到最近(又称最后)的通知帖子。如果一篇帖子在8点出现,你会收到该帖子的通知,然后另一篇帖子在8点01分出现,你想收到该帖子的通知。然后一篇帖子在8点05分出现,你想收到该帖子的通知。我在正轨上吗?