在我的应用中发送此查询:
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
我查询chatRooms,其中updatedTime大于传递的时间变量。当我从firebase接收快照时,我更新变量时间并想查询聊天,其中updatedTime大于更新的变量时间。
答案 0 :(得分:2)
看来你要问的是
如何查询从特定时间开始的所有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
以及对updated_time为02或更高版本的现有节点的任何未来添加或更改都将返回结果。
因此,如果将一个子项添加到包含updated_time的“chatsRef”节点:“04”,则会自动返回这些结果
02
04
07
请记住.Value返回符合查询条件的所有子节点,因此您需要通过.children迭代它们以获取每个节点的值。