【问题标题】:Detecting Connection State Called Twice检测连接状态调用两次
【发布时间】:2018-07-05 09:29:50
【问题描述】:
let connectedRef = Database.database().reference(withPath: ".info/connected")
connectedRef.observe(.value, with: { snapshot in
   if snapshot.value as? Bool ?? false {
      print("Connected")
   } else {
      print("Not connected")
   }
})

我正在使用它来检测我与 Firebase 的连接状态。我的问题是当他们是互联网连接时,结果是“未连接”,然后是“已连接”。当他们没有互联网连接时,它只会直接进入“未连接”。谁能解释一下?

【问题讨论】:

  • 可以提供funcobserve的签名吗?如果有一个change 参数,那么它可能会被调用old 然后new
  • 为什么不直接返回新值呢?旧值一开始就没用。
  • 我不知道这个函数在你的示例中是如何工作的,但它看起来像 KVO,并且 KVO 允许你观察属性变化“from-to”、“from”、“to”等。在较新的 KVO API 中,观察块的参数中有一个对象,它封装了旧值、新值和更改类型,因此被调用一次。在 UIGestureRecognizer 中也使用此逻辑,当单处理程序被多次调用时,开发人员应处理识别器状态 - 即开始、更改、结束或失败。

标签: ios swift firebase firebase-realtime-database


【解决方案1】:

您看到的是预期的行为。

.info/connected 标志确定应用/客户端是否连接到 Firebase 数据库后端。虽然这当然需要您有互联网连接,但还有更多。这就是为什么 .info/connected 有可能成为 false 的原因,即使您的互联网连接正常。

当您启动应用程序时尤其如此。在应用程序启动后,Firebase 客户端连接到其数据库服务器之前需要一些时间,因此通常.info/connected 值以false 开头,然后变为true。有时它甚至会在稳定之前切换几次。

另见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    相关资源
    最近更新 更多