ios - 离线查询数据的实现和功能-实时数据库
问题描述
我目前正在将数据写入实时数据库,如下所示:
function writeData {
guard let uid = Auth.auth().currentUser?.uid else { return }
let databaseRef = Database.database().reference().child("users/\(uid)")
let object = [
...
] as [String: Any]
databaseRef.setValue(object)
}
它工作正常,但我目前正在尝试减少数据丢失杀死应用程序的可能性。这样做我最近浏览了网络并发现了一些名为:“Querying Data Offline”的内容,代码如下:
let scoresRef = Database.database().reference(withPath: "scores")
scoresRef.queryOrderedByValue().queryLimited(toLast: 4).observe(.childAdded) { snapshot in
}
我是否正确假设对于上面的示例,最后 4 次数据写入尝试正在保存,直到再次连接 - 一旦有连接,它们就会被上传?
如果这是适合我的愿望的功能 - 如何实现它?如何将它与我的writeData()
功能连接起来?上例中的“分数”指的是什么?
解决方案
如果 Firebase 客户端未连接到其服务器,则该应用程序的任何写入操作始终由 Firebase 客户端排队。连接恢复后,Firebase 客户端会将排队的写入发送到服务器。
当您启用磁盘持久性时,Firebase 客户端会将排队的写入操作写入磁盘上的文件。Firebase 客户端还将最近读取操作的任何结果写入同一文件。这样,它们也将在任何应用程序关闭后继续存在,并且在用户(重新)启动应用程序并建立连接时可用/重试。
您显示的代码与排队的写入无关。这个:
scoresRef.queryOrderedByValue().queryLimited(toLast: 4).observe(.childAdded) { snapshot in
附加一个监听器/观察器scoresRef
以获得 4 个最高分。如果客户端连接到服务器,这将是最新/最高分数。如果客户端未连接到服务器,但scoresRef
在磁盘上有数据,则它将是客户端最后一次看到的最新/最高分数。
推荐阅读
- php - 如何在 Symphony 旧版本中从控制器方法创建手动登录
- android - 带有adjustViewBounds的ImageView在通货膨胀时不一致地显示在ConstraintLayout中
- python - Pyspark - 在 zip 文件中导入模块时出错
- java - Java 8 流 - 通过比较两个列表进行过滤
- python - 将 3D numpy 数组拆分为更小的 3D 数组
- ios - 应用程序图标上的快捷方式项不适用于 iOS 13
- javascript - 如何在呈现不同结果的forEach中修复正则表达式
- python - Django Admin - 第一行中的自定义列未正确呈现
- cucumberjs - .click 函数通过时步骤,但实际上并未单击浏览器中的元素
- vue.js - 如何禁用其他页面上的默认布局