我试图从firebase中读取旧值,更新它,然后使用以下代码将其保存回来:
var unreadChatsRef = usersRef.childByAppendingPath("\(user.objectId!)/unreadChats/\(self.chat.objectId!)")
unreadChatsRef.observeSingleEventOfType(FEventType.Value, withBlock: { (snapshot) -> Void in
if snapshot.exists() {
var msgCnt = snapshot.value as? Int
msgCnt = (msgCnt ?? 0) + 1
unreadChatsRef.setValue(msgCnt)
}
})
之前我犯了一个错误,并使用observeEventType而不是单个事件,因此通过保存该值,它会触发自己一次又一次地更新值。我在调试会话中看到这个时停止了我的iOS程序。不知怎的,后来的更新都没有进入firebase服务器。我通过调用Firebase.defaultConfig().persistenceEnabled = true
启用了本地缓存。所以我最终得到的缓存值与服务器上的值不同。
令我感到困惑的是,即使我的其他iOS聊天客户端更新了该号码,此iOS设备(上面的代码)仍然会看到缓存的值,并且永远无法从服务器获取正确的值。难道我做错了什么?如何告诉我的程序使缓存无效并从服务器获取新副本?