我正在尝试在Firebase中为我的swift iOS应用创建一个查询。我对查询的问题是它不会立即从firebase获取坐标,除非它们被更改。我尝试了其他所有观察者类型,但似乎都没有。我知道我目前有观察者类型需要更改,但我需要正确的方法让它在加载应用程序后立即获取位置,并使用firebase进行更新。 .childAdded
会立即获取位置,但在Firebase上更改它们时不会更新。
userDirectory.queryOrderedByChild("receiveJobRequest")
.queryEqualToValue(1)
.observeEventType(.ChildChanged , withBlock: {snapshot in
var cIhelperslatitude = snapshot.value["currentLatitude"]
var cIhelperslongitude = snapshot.value["currentLongitude"]
答案 0 :(得分:1)
如果您想要收听多种事件类型,则需要注册多个侦听器。
let query = userDirectory.queryOrderedByChild("receiveJobRequest")
.queryEqualToValue(1)
query.observeEventType(.ChildAdded, withBlock: {snapshot in
var cIhelperslatitude = snapshot.value["currentLatitude"]
var cIhelperslongitude = snapshot.value["currentLongitude"]
query.observeEventType(.ChildChanged, withBlock: {snapshot in
var cIhelperslatitude = snapshot.value["currentLatitude"]
var cIhelperslongitude = snapshot.value["currentLongitude"]
您可能希望将该公共代码重构为方法,并从.ChildAdded
和.ChildChanged
块调用。
或者,您可以注册.Value
事件,每次更改查询下的值时,会触发初始值和。但是,由于.Value
与所有匹配的子项一起调用,因此您必须循环遍历块中的子项:
query.observeEventType(.Value, withBlock: {allsnapshot in
for snapshot in allsnapshot.children {
var cIhelperslatitude = snapshot.value["currentLatitude"]
var cIhelperslongitude = snapshot.value["currentLongitude"]
}