如何使用 Swift 在 Firebase 中使用相同的关键字存储不同数据的多个实例?

Posted

技术标签:

【中文标题】如何使用 Swift 在 Firebase 中使用相同的关键字存储不同数据的多个实例?【英文标题】:How can I store multiple instances of different data with the same keyword in Firebase using Swift? 【发布时间】:2020-06-05 05:08:10 【问题描述】:

我正在创建一个具有购物车系统的 ios 应用。我有一个用于选择项目的屏幕,然后一旦单击该项目,它就会进入一个用于选择数量的新屏幕。将商品添加到购物车后,我想将其存储在 Firebase 中,以便当用户进入购物车时,可以从 Firebase 加载数据。我尝试了以下方法:

@IBAction func addToCartButtonPressed(_ sender: UIButton) 
    let reference = Database.database().reference.child("UserCart").child(Auth.auth().currentUser.uid)
    reference.updateChildValues(["Item Name": itemName, "Item Price": itemPrice, "Item Quantity": itemQuantity])
    self.dismiss(animated: true, completion: nil)

当我这样做时,我没有达到我想要的效果,因为如果用户从 Order View Controller 添加另一个项目,那么我刚刚写入 Firebase 的现有信息就会被覆盖。我知道这就是它的设计工作方式,所以我想知道是否有另一种方式可以写入 Firebase,并在 Firebase 中拥有多个 itemNameitemPriceitemQuantity 实例。我稍后计划读取这些数据并将其存储在一个数组中。如果有帮助,我正在使用 Swift 5。谢谢!

【问题讨论】:

【参考方案1】:

您需要阅读working with lists of data 上的文档。

要写一个新项目,要做的事情是append to a list of data 使用childByAutoId()

let reference = Database.database().reference
    .child("UserCart")
    .child(Auth.auth().currentUser.uid)
    .childByAutoId()

SDK 会生成一个唯一的 ID,用作写入子节点的路径。由于对childByAutoId() 的每次调用都会生成一个唯一的 ID,因此每个新的孩子都将被单独添加,并且不会覆盖任何内容。

【讨论】:

您能否也编辑您的答案以涵盖我如何将这些放入数组中。我应该在第一次明确这一点,但我编辑了我的问题以涵盖我还需要什么。 请单独询问psot后续问题。预计该问题显示了解决问题的尝试。 Stack Overflow 仅限于每个帖子一个问题/问题,以便人们轻松搜索和导航。

以上是关于如何使用 Swift 在 Firebase 中使用相同的关键字存储不同数据的多个实例?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 swift 和 firebase 正确使用完成处理程序?

如何使用 swift 读取 Firebase 数据库中的值,然后在地图上进行注释?

如何在 UILabel 中显示名字?我正在使用 Firebase 和 Swift 开发 IOS 应用程序

如何使用 Swift 在 Firebase 中创建具有多个属性的用户?

如何使用 Swift 在 Firebase 中使用相同的关键字存储不同数据的多个实例?

如何使用 Swift 使用 Firebase 正确观察两个连接节点