簡體   English   中英

快速從Firebase檢索數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM