无法使用 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 服务器?

Swift 4 Alamofire 和编码 UIImage 的问题

使用 swift 将数据写入 Firebase

SWIFT:初始写入/删除后无法删除 Plist 文件

Swift - JSON 写入中的***类型无效

将数组内容(自定义类型)写入 plist 作为 swift 中的键控数组