为什么数据库快照循环 运行 应用程序是新构建的而不是刚刚重新启动或登录时循环太多?

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 已修复它。