【发布时间】:2020-01-29 03:05:55
【问题描述】:
我像这样上传我的数据:
通过使用这些功能:
extension Database {
func createPurchase (purchaseID : String, quantity: String, completion: @escaping (Error?) -> ()){
guard let uid = Auth.auth().currentUser?.uid else { return }
let userPostRef = Database.database().reference().child("purchases").child(uid) //taken off auto ID
let values = ["purchase" : purchaseID, "quantity" : quantity ] as [String: Any]
userPostRef.updateChildValues(values) { (err, ref) in
if let err = err {
print("Failed to save purchase to database", err)
completion(err)
return
}
completion(nil)
}
}
}
.
在视图控制器 1 中:
func callID (){
let itemCount = CartController.shared.items.count
for i in 0...itemCount-1 {
let quantity = CartController.shared.items[i].quantity
let quantity1 = String(quantity)
let item = CartController.shared.items[i].product.id
Database.database().createPurchase(purchaseID: item, quantity: quantity1 ) { (err) in
if err != nil {
print("error uploading purchase to Firebase ")
return
}
}
}
}
callID 使用 createPurchase 获取每个产品的 sku 编号及其数量并上传到 firebase。 但是,它会覆盖之前上传的内容。所以当我加载超过 1 个产品时。它只留下最后的产品 sku 和数量。 对于这个例子,我从 3 个产品开始,但只有 1 个(最后一个)被上传。 我怎样才能上传所有数据。即停止这个覆盖?
这是我检索它的方式:
extension Database {
func fetchPurchase(withUID uid: String, completion: @escaping (Purchase) -> ()) {
Database.database().reference().child("purchases").child(uid).observeSingleEvent(of: .value, with: { (snapshot) in
guard let userDictionary = snapshot.value as? [String: Any] else { return }
let purchase = Purchase(uid: uid, dictionary: userDictionary)
completion(purchase)
}) { (err) in
print("Failed to fetch purchase from database:", err)
}
}
}
.
在视图控制器 2 中:
struct Purchase {
let uid: String
let purchases: String
let quantities: String
init(uid: String, dictionary: [String: Any]) {
self.uid = uid
self.purchases = dictionary["purchase"] as? String ?? ""
self.quantities = dictionary["quantity"] as? String ?? ""
}
}
var myPurchases: [Purchase] = []
private func fetchPurchaseForCurrentUser() {
guard let currentLoggedInUserId = Auth.auth().currentUser?.uid else { return }
Database.database().fetchPurchase(withUID: currentLoggedInUserId, completion: { (purchases) in
self.myPurchases.append(purchases)
print("myPurchases", self.myPurchases)
})
}
这是我得到的打印输出:
myPurchases [myShop.Purchase(uid: "Tgb9MyxTfdTRd9tQhInsjNRXoPL2", purchases: "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0Lzk4OTUzMDk2OTk=", quantities: "2")]
这仅显示一个产品,但我需要拥有多个产品。
请帮忙!
编辑:
这是我使用 ChildByAutoId() 时的屏幕截图。 我得到所有产品(在这种情况下是 2 个)。 但我无法从快照中检索信息并设置到我的文本字段中?
【问题讨论】:
-
您需要所有购买,或者您想用一些价值过滤它?
-
因为 Database.database().reference().child("purchases").child(uid) 这只会返回一个值。如果您可以在屏幕截图中购买更多商品,那将会很有帮助。
-
我只能存储一个购买值,但我想存储更多。如果我使用 ChildAutoId,那么我可以将它们全部存储起来。但是我可以全部找回吗?
-
如果要获取所有值,请使用“Database.database().reference().child("purchases")”和单值观察者
-
添加“child(uid)”只会给你一个匹配的结果
标签: ios swift firebase firebase-realtime-database crud