Tha*_*hir 30 persistence objective-c ios firebase firebase-realtime-database
我的应用使用Firebase同步和恢复数据.我使用该setValue:withCompletionBlock:方法插入,更新和删除Firebase对象.只要存在CoreData保存,就会调用此方法,从而将所有本地更改同步到Firebase
- (void) setValue:(id)value withCompletionBlock:(void (^)(NSError* error, Firebase* ref))block;
Run Code Online (Sandbox Code Playgroud)
现在同步将所有本地数据上传到firebase,而restore则使用firebase数据替换本地数据.
- (void) observeSingleEventOfType:(FEventType)eventType withBlock:(void (^)(FDataSnapshot* snapshot))block;
Run Code Online (Sandbox Code Playgroud)
我观察FEventTypeValue并使用它FDataSnapshot来从Firebase获取数据并恢复本地数据.
所以一切都适合我,直到我开始persistence使用Firebase.
[Firebase setOption:@"persistence" to:@YES];
Run Code Online (Sandbox Code Playgroud)
现在persistence,当我打开时,当我更新时,比如将对象插入Firebase,然后恢复,恢复插入前的数据.即没有恢复新插入的对象.但是,如果我再次恢复,则会恢复插入的对象.删除对象时会发生同样的事情.当我第一次恢复时,删除的对象重新出现,当我再次恢复时,删除的对象消失.我可以看到通过Firebase数据视图正确插入和/或删除了Firebase对象.
我不确定我在这里做错了什么.我恢复时只有问题.我认为Firebase缓存导致此恢复问题.我正在考虑在恢复之前清除Firebase缓存.我的问题是
Mic*_*uer 26
不幸的是,这是当前测试版本的磁盘持久性的预期行为.您可以使用observeEventOfType而不是observeSingleEventOfType来解决它
基本上,无论何时观察数据,我们都会首先从持久性缓存中提取数据.该数据将是我们上次从Firebase收到的任何数据.因为您使用的是observeSingleEventOfType而不是observeEventOfType,所以您不会从Firebase接收定期更新,因此我们实际缓存的数据将不包含您编写的最新数据.
作为一个简单的修复,您可以在相关数据上添加observeEventOfType.您实际上不需要对事件做任何事情.但是如果你一直在听它们,那么你的应用程序将从firebase获取最新数据,当你调用observeSingleEventOfType时,你可以确信它将拥有缓存的最新数据.
这有点hacky,我们打算在以非beta形式发布持久性功能之前简化此API.对不起,痛苦!
| 归档时间: |
|
| 查看次数: |
8336 次 |
| 最近记录: |