【问题标题】:Firebase Database doesn't return value offlineFirebase 数据库不离线返回值
【发布时间】:2018-05-30 04:09:25
【问题描述】:

我正在开发一个带有 Firebase 数据库的应用,我还希望允许用户在离线时添加条目。想象一下以下情况(一切都离线;它可以在线完美运行):

  1. 用户添加了一个客户端(显示在主表视图中 - 有效)
  2. 在新添加的客户的详细视图中,他添加了与他的约会。约会在 Client Detail ViewController 的 tableview 中列出。
  3. 添加约会时,tableview 不会刷新,因为回调没有调用。

在代码中:

  1. navCont.child = userDB.child(entityNameClients).childByAutoId() navCont.child?.setValue(post) 其中 post 是包含客户值的字典
  2. 在detail view controller的viewDidLoad方法上,我调用如下代码:getUsersDBReference().child(entityNameAppointments).child(clientKey).observe(.value)。未调用回调(可能是因为其中没有元素)
  3. 添加预约

    var appointment:DatabaseReference
    

    appointment = getUsersDBReference().child(entityNameAppointments).child(clientKey).childByAutoId() appointment.setValue(appointmentDict)

  4. 未调用 2 的回调(--> 并且 tableview 未使用新约会刷新)

顺便说一句,我在 App Delegates applicationDidLoad-method 中设置了 Database.database().isPersistenceEnabled = true。 如果我在线添加客户端然后离线,它也可以工作。

【问题讨论】:

    标签: ios swift firebase firebase-realtime-database offline


    【解决方案1】:

    Firebase 支持的答案:

    SDK 尝试不使用“部分”数据触发 Value 事件。由于您只是更新被观察位置的子节点,因此我们没有“完整”数据,因此不会触发观察者。如果 SDK 曾经拥有该节点的“完整”数据(例如,因为您覆盖了整个节点,或者因为您之前在线并获得了完整的数据),那么它会在您更新它时触发事件。

    一种解决方法是使用 ChildAdded(和 ChildChanged 等)事件而不是 Value。

    【讨论】:

      猜你喜欢
      • 2017-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-24
      相关资源
      最近更新 更多