无法使用 Swift 4 将数据写入 Firebase 实时数据库
Posted
技术标签:
【中文标题】无法使用 Swift 4 将数据写入 Firebase 实时数据库【英文标题】:Unable to write data to Firebase real-time database with Swift 4 【发布时间】:2018-01-28 11:04:01 【问题描述】:我已经在我的可可豆荚中安装了 Firebase/Database,在我的 AppDelegate 中对其进行了配置,导入了我的 Google plist,将读写权限设置为 true,并在 viewDidLoad() 中写道
let rootRef = Database.database().reference()
rootRef.child("users").setValue(["name": "Ryan"])
rootRef.child("users").observe(.value) (snapshot) in
print(snapshot)
问题是,它会打印出
Snap (users)
username = Ryan;
但是,我没有看到我的实时数据库中的变化,所以如果我摆脱了
rootRef.child("users").setValue(["name": "Ryan"])
然后重新运行程序,没有任何结果。
在我的数据库中,如果我在我的根目录下添加一个键值对,比如 "Yo": "hey"
并使用
进行观察事件rootRef.child("yo").observe(.value) (snapshot) in
print(snapshot)
什么都没有了
我很确定我的 firebase 服务已连接,因为我的用户身份验证有效,但我的数据库没有。谁能帮帮我!
【问题讨论】:
这个rootRef.child("users").setValue(["name": "Ryan"])
没有被添加到数据库中?
显然是的。我不知道为什么。我在数据库中看不到它,即使刷新后,如果我立即打印出rootRef.child("users").observe(.value) (snapshot) in print(snapshot)
,那么我可以看到这些值,但是如果我删除该行并重新运行程序,我看不到任何结果。
最可能的原因是您没有从数据库中读取的权限。
【参考方案1】:
因为它不是孩子。
["yo":"hey"]
是一个字典数据结构。
代码:
rootRef.child("loginwithgooddesignpractice").observe(.value) (snapshot) in
print(snapshot)
【讨论】:
【参考方案2】:您可能遇到的问题可能源于对 Firebase 数据库结构的理解。在您的情况下,根被很好地引用,但是从那里它没有被很好地组织。要创建一个 root/users/id/yo:"hey" 结构,我建议将其写为:
rootRef.child("users").childByAutoId().setValue("hey", forKey: "yo")
这种方式将用户作为一个字典,它将保存其他用户的多个唯一 ID,这是另一个保存值 yo:"hey" 的字典。
【讨论】:
以上是关于无法使用 Swift 4 将数据写入 Firebase 实时数据库的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 Swift 连接到本地 Firebase 服务器?