为什么数据库快照循环 运行 应用程序是新构建的而不是刚刚重新启动或登录时循环太多?
Why would database snapshot loops run far too many loops when app is built new vs when just restarted or logged in?
我观察到的:在 iOS 上构建应用程序后;如果我登录并退出正确的循环次数 运行。但是,如果我在用户仍然登录的情况下构建新的应用程序(然后它会自动转到主页),太多的快照循环会得到 运行.
代码摘录如下:
let refArtists2 = Database.database().reference().child("people").queryOrdered(byChild: "caption").queryStarting(atValue:myInt).queryEnding(atValue: myInt1)
var handle: UInt = 0
handle = refArtists2.observe(DataEventType.value, with: { snapshot in
....
self.query1 = geoFire.query(at: self.dict, withRadius: 500)
self.handle1 = self.query1?.observe(.keyEntered, with: { (key, location) in
})
self.handle2 = self.query1?.observe(.keyExited, with: { key1, location in
})
self.query1?.observeReady({
while let people = enumerator.nextObject() as? DataSnapshot {
if people.key != thisUsersUid && self.componentArray.contains(people.key) {
print(self.componentArray,"man")
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
if snapshot.exists() && self.people.isEmpty == false {
self.ref.removeObserver(withHandle: handle)
self.ref.removeObserver(withHandle: self.handle1)
self.ref.removeObserver(withHandle: self.handle2)
}
}
}
}
})
要看的关键字是“man”。如果显示 3 个用户,则打印 man 3 次,因此循环完成 3 次。但是,在循环太多的情况下 运行,似乎 man 是为 500 英里以内的用户的每次迭代打印的。
错误最终与 while let
循环有关。使用 for in
已修复它。
我观察到的:在 iOS 上构建应用程序后;如果我登录并退出正确的循环次数 运行。但是,如果我在用户仍然登录的情况下构建新的应用程序(然后它会自动转到主页),太多的快照循环会得到 运行.
代码摘录如下:
let refArtists2 = Database.database().reference().child("people").queryOrdered(byChild: "caption").queryStarting(atValue:myInt).queryEnding(atValue: myInt1)
var handle: UInt = 0
handle = refArtists2.observe(DataEventType.value, with: { snapshot in
....
self.query1 = geoFire.query(at: self.dict, withRadius: 500)
self.handle1 = self.query1?.observe(.keyEntered, with: { (key, location) in
})
self.handle2 = self.query1?.observe(.keyExited, with: { key1, location in
})
self.query1?.observeReady({
while let people = enumerator.nextObject() as? DataSnapshot {
if people.key != thisUsersUid && self.componentArray.contains(people.key) {
print(self.componentArray,"man")
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
if snapshot.exists() && self.people.isEmpty == false {
self.ref.removeObserver(withHandle: handle)
self.ref.removeObserver(withHandle: self.handle1)
self.ref.removeObserver(withHandle: self.handle2)
}
}
}
}
})
要看的关键字是“man”。如果显示 3 个用户,则打印 man 3 次,因此循环完成 3 次。但是,在循环太多的情况下 运行,似乎 man 是为 500 英里以内的用户的每次迭代打印的。
错误最终与 while let
循环有关。使用 for in
已修复它。