我正在尝试为我们的iOS应用添加离线功能(简单地说,这是一个管理用户和项目的应用),它依赖于Firebase。这是使用Swift 3.0。我按照指南进行了以下操作:
在FIRApp.configure()之后立即将此添加到我的应用程序委托:
FIRDatabase.database()。persistenceEnabled = true
在users / userKey和所有用户的项目/ projectKey节点上调用keepSynced(true)。
该应用程序在线(显然)工作正常,并保持同样良好的离线工作,即使我在断开互联网时重新启动它。当我在离线时创建新项目时出现问题。我使用以下内容创建一个新项目:
let projectKey = FIRDatabase.database().reference(withPath: "projects").childByAutoId().key
let logsKey = FIRDatabase.database().reference(withPath: "projects").child(projectKey).child("logs").childByAutoId().key
FIRDatabase.database().reference().updateChildValues([
"projects/\(projectKey)/key1" : value1,
"projects/\(projectKey)/key2" : [
"subkey1" : subvalue1,
"subkey2" : subvalue2
],
"projects/\(projectKey)/key3/\(logKey)" : [
"subkey3" : subvalue3,
"subkey4" : subvalue4
]
]) { error, ref in
if error != nil {
print("Error")
return
}
}
在项目创建之后,如果我尝试在“projects / projectKey / key1”或“projects / projectKey / key2”上调用observeSingleEvent,一切都很好。但是,在“projects / projectKey / key3 / logKey”上调用相同的函数永远不会触发阻塞/回调 - 只有在连接回来时才会调用它。
我已启用FIRDatabase日志记录(确认发生本地写入)以查找提示但似乎无法找出问题。
我有什么遗失的吗?
注意:使用最新的Firebase iOS SDK(3.5.2)。
编辑:如果我扩展深层链接似乎工作正常:let projectKey = FIRDatabase.database().reference(withPath: "projects").childByAutoId().key
let logsKey = FIRDatabase.database().reference(withPath: "projects").child(projectKey).child("logs").childByAutoId().key
FIRDatabase.database().reference().updateChildValues([
"projects/\(projectKey)" : [
"key1" : value1,
"key2" : [
"subkey1" : subvalue1,
"subkey2" : subvalue2
],
"key3" : [
logKey : [
"subkey3" : subvalue3,
"subkey4" : subvalue4
]
]
]
]) { error, ref in
if error != nil {
print("Error")
return
}
}
这可能是Firebase在离线时管理其本地缓存状态的方式中的错误吗?就好像它不知道在updateChildValues中使用深层链接创建的中间密钥。