[英]Swift retrieve data from Firebase
我已經嘗試過嘗試從Firebase(Database)檢索數據的各種嘗試,但是可惜沒有運氣:I ...所以我想知道這是否是正確的方法?
let dBRef = Database.database().reference()
dBRef.child("Users").child("Advertisements").queryOrderedByKey().observe(.childAdded, with: { (snapshot) in
let snapshotValue = snapshot.value as? NSDictionary
let imageAd = snapshotValue?["imageAd"] as? String
let priceAd = snapshotValue?["priceAd"] as? String
我不確定我是否真的收到了數據,也不確定如何進行測試...我嘗試了調試,但是沒有運氣...所以我的問題是,我的代碼做錯了嗎? 如果沒有,該如何檢查我是否真的收到了數據?
您正在觀察childAdded
事件。
因此,只有當我將新值插入Users/Advertisements
時,才會執行關閉。
試試這個代碼
Database
.database()
.reference()
.child("Users")
.child(Auth.auth().currentUser!.uid)
.child("Advertisements")
.queryOrderedByKey()
.observeSingleEvent(of: .value, with: { snapshot in
guard let dict = snapshot.value as? [String:Any] else {
print("Error")
return
}
let imageAd = dict["imageAd"] as? String
let priceAd = dict["priceAd"] as? String
})
關閉將只執行一次,並且“幾乎”立即執行。
要測試是否正確提取了數據,可以在代碼下方添加print(imageAd)
。 假設此代碼位於viewDidLoad
則當視圖控制器啟動時,它將顯示在控制台中。
另外,我相信.queryOrderedByKey(...)
現在是.queryOrdered(byKey:...)
請記住, .observe()
本質上會打開與您的.observe()
的連接。 如果您希望實時的實時連接保持打開狀態並監聽數據更新,則這很有意義。 如果只需要一次數據,則在加載某些內容時,請考慮改用.observeSingleEventOf()
。 如果要使用.observe()
,則還需要使用.removeAllObservers()
關閉需要關閉的連接。
似乎您只是想添加您先前在數據庫中設置的此信息。 我會這樣做-(請記住,您在json中缺少uid步驟。我假設它是下面代碼中的當前用戶,但是如果它是靜態用戶,則需要將其定義為串):
let uid = Auth.auth().currentUser?.uid
dBRef.child(Users).child(uid).child(Advertisements).observeSingleEvent(of:
.value, with: { (snapshot) in
let value = snapshot.value as? NSDictionary
let imageAd = value?["imageAd"] as? String ?? ""
let priceAd = value?["priceAd"] as? String ?? ""
print("imageAd: \(imageAd!)")
print("priceAd: \priceAd!)")`
})
我可以看到一個問題是您的路徑錯誤。 嘗試類似:
let dBRef = Database.database().reference()
dBRef.child("Users/\(FirAuth.auth.currentUser.uid)/advertisements")
dbRef.queryOrderedByKey().observe(.childAdded, with: { (snapshot) in
我遇到了與您同樣的問題,但是通過查看firebase Doc,您可以看到如何輕松檢索數據。
lazy var databaseRef = Database.database().reference().child(yourpath).("Advertisements")
ref.observeSingleEvent(of: .value, with: { (snapshot) in
let postDict = snapshot.value as? [String : AnyObject] ?? [:]
if let email = postDict["Email"] {
print(email)
}
}) { (error) in
print(error.localizedDescription)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.