該應用程式向用戶提供隨機報價。我希望用戶能夠保存報價并查看他們保存了哪些報價。我可以得到一個單引號來保存,但是,只要再次單擊保存按鈕,它就會用新的引號覆寫之前保存的引號。我試圖在別處找到答案,但我似乎無法讓它發揮作用。下面是我目前的代碼。我也嘗試用 updateChildValues 替換 setValue,但我收到錯誤無法將型別“String”的值轉換為預期的引數型別“[AnyHashable: Any]”。
import UIKit
import FirebaseDatabase
import FirebaseAuth
class QuotesViewController: UIViewController {
var ref: DatabaseReference?
override func viewDidLoad() {
super.viewDidLoad()
ref = Database.database().reference()
}
@IBAction func backToMain(_ sender: UIButton) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(identifier: "mainHome")
vc.modalPresentationStyle = .overFullScreen
present(vc, animated: true)
}
@IBOutlet weak var quotesLabel: UILabel!
@IBAction func saveButton(_ sender: UIButton) {
guard let user = Auth.auth().currentUser?.uid else { return }
ref!.child("users").child(Auth.auth().currentUser!.uid).child("Quotes").child("quote").setValue(quotesLabel.text!)
}
@IBOutlet weak var nextButtonOutlet: UIButton!
@IBAction func nextQuoteButton(_ sender: UIButton) {
let quotesData = QuotesData()
let randomQuote = quotesData.randomQuote()
quotesLabel.text = randomQuote
}
}
我也試過:
ref!.child("users").child(Auth.auth().currentUser!.uid).child("Quotes").child("quote").updateChildValues(quotesLabel.text!)
uj5u.com熱心網友回復:
這是意料之中的,您基本上是在參考相同的節點child("quote")并嘗試更改其值。但是如果你想有多個引號,你需要做的是在父節點下創建多個child("Quotes")不同名稱的節點。
一種簡單的方法是,您可以為每個新參考節點附加不同的數字,例如,當您要添加新參考時,請定義以下路徑:
child("Quotes").child("quote1").setValue("...")
另一個參考的路徑:
child("Quotes").child("quote2").setValue("...")
等等。
或者,您可以使用 Firebase 資料庫參考方法childByAutoId()來生成唯一名稱。您將在定義父節點后使用該方法:
ref!.child("users").child(Auth.auth().currentUser!.uid).child("Quotes").childByAutoId().setValue(quotesLabel.text!)
筆記:
盡量避免強制解包,因為這會使您的應用程式更容易崩潰。
uj5u.com熱心網友回復:
我認為您必須在 Firebase 資料庫中再添加一個欄位,該欄位必須是唯一的
第一次將資料添加到 firebase 你可以寫這樣的東西
let key = ref.child("Quotes").childByAutoId().key
let dict = ["quote": quotesLabel.text!,
"quoteId" : key ?? ""
] as [String: Any]
每當您保存相同的報價時,您都可以像這樣更新特定 quoteID 中的值
func updateDatainFirebase(quoteId:String,quote:String){
let dict = ["quote": quotesLabel.text!,
"quoteId" : quoteId ?? ""
] as [String: Any]
self.ref.child(quoteId).updateChildValues(dict)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/333921.html
