Firebase持久化,清除Firebase缓存

2024-05-03

我的应用程序使用 Firebase 来同步和恢复数据。我用setValue:withCompletionBlock:插入、更新和删除 Firebase 对象的方法。每当有 CoreData 保存时就会调用此方法,从而将我的所有本地更改同步到 Firebase

- (void) setValue:(id)value withCompletionBlock:(void (^)(NSError* error, Firebase* ref))block;

现在同步会将所有本地数据上传到 firebase,而恢复会将本地数据替换为 firebase 数据。

- (void) observeSingleEventOfType:(FEventType)eventType withBlock:(void (^)(FDataSnapshot* snapshot))block;

我观察到FEventTypeValue并使用FDataSnapshot从 Firebase 获取数据并恢复本地数据。

所以一切都很适合我,直到我设置persistence到 Firebase。

[Firebase setOption:@"persistence" to:@YES];

现在,当persistence开启后,当我更新时,比如说将一个对象插入到Firebase中,然后恢复,恢复的是插入之前的数据。即新插入的对象不会被恢复。但是,如果我再次恢复,插入的对象就会恢复。删除对象时也会发生同样的情况。第一次恢复时,删除的对象会重新出现,再次恢复时会消失。我可以通过 Firebase 数据视图看到 Firebase 对象已正确插入和/或删除。

我不确定我在这里做错了什么。我只在恢复时遇到问题。我认为 Firebase 缓存导致了此恢复问题。我正在考虑在恢复之前清除 Firebase 缓存。我的问题是

  1. 恢复之前清除缓存是一个好方法吗?
  2. 如果是,如何清除 Firebase 缓存?
  3. 如果没有,您能给我建议恢复数据的最佳方法吗?

[注意:如果您可以选择使用 Cloud Firestore 而不是实时数据库,那么它具有更好的离线支持。当您执行 .get() 时,它会自动尝试从服务器获取最新数据,并且仅在离线时使用缓存数据。您还可以专门请求从服务器或缓存检索数据。]

不幸的是,这是预期的行为。您可以通过使用observeEventOfType而不是observeSingleEventOfType来解决它

基本上,每当您观察数据时,我们都会首先从持久缓存中提取数据。该数据将是我们上次从 Firebase 收到的任何数据。由于您使用的是observeSingleEventOfType而不是observeEventOfType,因此您不会从Firebase接收定期更新,因此我们缓存的数据实际上不会包含您编写的最新数据。

作为一个简单的修复,您可以只在有问题的数据上添加一个observeEventOfType。您实际上不需要对事件执行任何操作。但是,如果您一直收听它们,那么您的应用程序将从 Firebase 获取最新数据,并且当您调用observeSingleEventOfType 时,您可以确信它将缓存最新数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firebase持久化,清除Firebase缓存 的相关文章

  • 在 hooks 文件夹中使用节点脚本时,cordova 插件安装问题

    Cordova 3 4 hooks 未在 iOS 中正确安装提到的插件 我正在添加install plugins js进入文件夹project project root hooks after platform add其中有以下代码 usr
  • cURL 错误 77:设置证书验证位置时出错:CAfile

    我正在使用 Firebase php SDKlink https firebase php readthedocs io en latest index html并在 Windows 10 上的 XAMPP 服务器上使用 laravel 最
  • 当我们有多对多关系时,如何在 firebase 中获取数据

    我读了这个问题Firebase 中的多对多关系 https stackoverflow com questions 41527058 many to many relationship in firebase 这里描述了如何在 fireba
  • 更改导航项(栏)的背景颜色

    有没有一种简单的方法可以更改视图顶部导航项的背景颜色 我有一个基于导航的应用程序 我只希望一个视图获得另一种背景颜色 我主要使用 IB 创建视图 我找到了以下解决方案 未测试 float r 10 float g 55 float b 13
  • 重叠的装载机圆

    我试图重现苹果为应用程序 活动 制作的重叠圆圈 见下图 如果您使用标准贝塞尔路径 起始 结束位置将仅在 0 到 2PI 之间产生影响 例如 如果您尝试填充 4PI 即使使用一些阴影 则无法模拟重叠加载 如何制作类似于苹果解决方案的东西来创建
  • Objective-C 中是否有命名初始化方法的约定?

    在可以通过不同的 init 方法初始化的 Objective C 类中 将所有初始化程序共用的初始化代码收集到一个从其他 init 方法 有时也从从 Nib 唤醒 是否有关于如何命名该方法的约定 初始化器 初始化公共 根据 Apple 的说
  • AVCaptureDevice 找不到任何设备

    这行代码是我今天遇到的问题 macOS 应用程序 NSArray devices AVCaptureDevice devicesWithMediaType AVMediaTypeVideo 我更新Xcode后 系统总是让我空着devices
  • 我可以在 firebase android 中加载另一个用户个人资料图像吗?

    如果我有其他用户的电子邮件但我以其他用户身份登录 我是否可以加载其他用户的个人资料图像 如果您使用 Firebase Storage 那么从技术上讲是的 它只是一个您可以从中检索任何文件的文件系统 如果不伪造您的应用程序 获取 api 密钥
  • 如何右对齐 UILabel?

    Remark 实施 myLabel textAlignment right does not解决了我的问题 这不是我所要求的 我想要实现的是让标签对齐右对齐 为了更清楚地说明 这就是如何left对齐外观 就是这样justify对齐外观 if
  • iOS UITableViewCell cell.imageView 设置圆角

    嘿我正在尝试设置cell imageView s cornerRadius 但似乎不起作用 cell imageView layer cornerRadius 9 它会起作用还是我应该添加自定义UIImageView在我的牢房里有圆角吗 我
  • 配置根项目“firebase_auth”时出现问题

    my error 我无法构建 apk 发布文件 我完成了应用程序一段时间 没有出现错误 几天后 我在构建应用程序时收到此错误 请告诉我如何摆脱它 我尝试了 4 个小时 什么也没得到 FAILURE Build failed with an
  • 从 Mac 命令行访问 iOS 应用程序目录(沙箱)

    我需要使用 Mac 或 Linux 上的命令行 非 GUI 访问 iOS 设备上安装的应用程序的沙箱目录 这有助于开发和测试自动化 将 json 文件放入沙箱中可以让我设置参数 例如额外的调试消息和更小的刷新间隔 像 iFunBox 这样的
  • iPhone/Objective-C - 呈现视图和委托时的 UIDocumentInteractionController 类参考

    我在用UIDocumentInteractionController在我的应用程序中 以便在我的应用程序中呈现 Instagram 过滤器屏幕 如下所述 http instagram com developer iphone hooks h
  • 不明白 Swift 中的闭包示例

    我正在尝试了解 swift 和闭包 我被这个例子困住了 numbers map number Int gt Int in let result 3 number return result 什么是 number Int gt Int 它是一
  • 如何使用 Core Graphics 在我的触摸位置绘制一个圆圈?

    新程序员来了 我在尝试使用 Core Graphics 在触摸位置周围绘制描边弧时遇到问题 我有绘制圆圈的方法工作正常 并且我已经测试并在点击屏幕时注册触摸 但是当我尝试在点击时调用绘制圆圈的方法时 我收到错误 CG ContextBlah
  • 在视图之间传递核心数据实体变量

    我无法理解如何在视图之间使用核心数据实体变量 为了更好地理解我的问题是什么 我的代码如下 View A 基本上 您必须将完整预算实体或相关预算实体的 ID 从视图 A 传递到视图 B 由于不知道您的应用程序的视图层次结构和逻辑 我假设您选择
  • 高效创建 x 层深度的嵌套 for 循环

    这可能是一件简单的事情 但我需要创建一个循环结构 使其循环 y x 次以创建 x 和 y 的所有可能组合 例如 如果有 4 个 x 每个 x 有 2 个 y 我想做这样的事情 for int a 0 a lt y a for int b 0
  • iOS 视图控制器内存在被关闭后未释放

    当用户单击按钮时 它会显示一个带有两个视图控制器的新选项卡栏视图控制器 我是这样做的 ACLevelDownloadController dvc ACLevelDownloadController alloc initWithNibName
  • DatePicker 停止 CoreData 按预期工作

    我有一个应用程序 它保存 UIDatePicker 中的文本和日期 然后在您回到 UIDatePicker 中的该日期时显示该注释 效果很好 只有我发现将 UIDatePicker 日期设置为今天会停止 CoreData 工作 只有当我运行
  • iOS 电池监控 Swift

    我已将监控设置为启用 但模拟器和设备中的电池电量仍然为 1 UIDevice currentDevice batteryMonitoringEnabled true var level UIDevice currentDevice batt

随机推荐

  • 根据另一个表中的值查找总计数

    在Mysql中 我的表中有具有重复值的城市 表城市 Name New York USA New York USA Chicago USA Chicago USA Chicago USA Paris France Nice France Mi
  • 如何将大型 JSON 对象直接序列化到 HttpResponseMessage 流?

    有没有办法将大型 JSON 对象直接流式传输到 HttpResponseMessage 流 这是我现有的代码 Dictionary
  • 使用 TypeScript 中的类型导入节点和 Express

    我正在尝试在 Visual Studio Code 中设置 TypeScript Express node 应用程序 如下所示微软指南 https code visualstudio com docs runtimes nodejs typ
  • 需要重定向 .NET 应用程序的帮助

    我正在尝试让 vscode 启用统一的 c 代码完成 如下this https code visualstudio com docs other unity指南显示 我曾有一个problem https stackoverflow com
  • ECLIPSE:无法下载新软件,停留在“待处理...”状态

    使用 Eclipse 3 7 Indigo 我知道有类似的问题 顺便说一下 已经过时了 但没有一个可以解决我的问题 我转到帮助 gt 安装新软件 gt 使用 并选择 靛蓝 http download eclipse org releases
  • 如何在vba中刷新/加载Excel中的RTD Bloomberg函数(BDH)

    我想知道 VBA 代码中是否有办法强制 Bloomberg 函数 在电子表格中 更新其值 任何 BDH 函数 目标开发人员面临类似问题 拥有彭博终端 我尝试过什么 Application RTD RefreshData Applicatio
  • 如何从 tcl 列表中删除空元素

    你好 我有以下清单 设置 qprList 12345 12345
  • 如何有条件地使用新的 Cocoa API

    苹果在 10 6 中添加了 NSPropertyListSerialization dataWithPropertyList format options error 并标记较旧的 NSPropertyListSerialization d
  • 如何使用 PDB 文件

    我听说使用 PDB 文件可以帮助诊断崩溃发生的位置 My basic理解是你给 Visual Studio 源文件 pdb 文件和崩溃信息 来自 Dr Watson 有人可以解释一下这一切是如何运作的 涉及什么吗 谢谢你 PDB 文件将程序
  • Cakephp:将 AppController 抽象到另一个层次,可能吗?

    我想知道是否可以在 AppController 和我的应用程序的其他控制器之间添加另一个抽象控制器 这样我的控制器 例如UsersController 扩展了 SecureController SecureController 扩展了 Ap
  • PHP 矩阵的逆矩阵

    I saw 这个问题 https stackoverflow com questions 211160 python inverse of a matrix 并弹出这个想法 PHP 有没有一种有效的方法来做到这一点 EDIT 最好有演示 你
  • 如何在 makefile 中针对特定目标使用 include 指令

    我只想将 include 指令用于特定目标 当不需要目标时 我不想运行其他 makefile 因为这意味着 makefile 是不必要生成的 那么有没有一种方法可以有条件地使用 include 指令 该指令以目标为条件 或者以某种方式使 i
  • 在 portlet 中使用 json 对象响应 http 请求

    我是liferay portlet 开发的初学者 我正在开发一个portlet 它接收http get 请求 处理一些信息 然后必须返回一个json 对象 我的问题是我的 portlet 发送整个 html 页面而不仅仅是 json 对象
  • Visual Studio 2010 是否允许您编辑图标?

    当我在 Visual Studio 2010 专业版 中双击 ico 文件时 它会打开看起来像图标编辑器的内容 看起来应该很容易从左侧选择颜色并编辑像素 但我的鼠标是一个放大镜图标 左键单击 右键单击 他们所做的只是切换图标的缩放 我不知道
  • 返回元组的第一个元素

    假设我创建一个将两个整数相加的函数 def addInt a Int b Int Int Int val x a b x 2 我回来了 result 2 故意为了这个问题 现在我想创建一个仅返回 x 的变量 val result addIn
  • python中跨模块和线程的全局变量

    我有一个配置文件 config py 它包含一个全局变量 即在 config py 中我有 5 是默认值 config py globalVar 5 现在 在模块 run py 中 我设置全局变量 然后调用打印函数 run py impor
  • 将数据从意图服务传递到活动

    我有一个广播接收器 正在调用intentservice 我想将intentservice中收到的数据发送到一个活动 String s extras getString Notice 我想将此收到的字符串发送到一个新活动 Override p
  • 比较中单引号与双引号的意义是什么? [复制]

    这个问题在这里已经有答案了 这会返回一个错误 return arg 0 arg 1 true false 错误 ISO C 禁止指针和整数之间的比较 然而 这并不 return arg 0 arg 1 true false 有什么区别 an
  • FlatBuffers:写入和读取二进制文件?

    我对 C 和 Google 中的文件流有基本了解平面缓冲区 http google github io flatbuffers Schema文件非常简单 也是创建一个缓冲区并读取 来自缓冲区指针 我不明白的是如何将多个缓冲区保存到一个二进制
  • Firebase持久化,清除Firebase缓存

    我的应用程序使用 Firebase 来同步和恢复数据 我用setValue withCompletionBlock 插入 更新和删除 Firebase 对象的方法 每当有 CoreData 保存时就会调用此方法 从而将我的所有本地更改同步到