簡體   English   中英

從 Firebase 自動 ID 檢索數據 - Firebase Swift

[英]Retrieving Data From Firebase Auto Id's - Firebase Swift

我想在 firebase 中捕獲我的 childByAutoId 中的所有值。本質上,它存儲了一個人入圍的所有項目。 但是,我似乎沒有捕捉到這一點,我認為這是因為我沒有正確調用快照來考慮自動 ID。

數據庫:

userID
 -> Favourited
    -> Auto Id
      -> itemName: x
    -> Auto Id
      -> itemName: x
    -> Auto Id
      -> itemName: x

代碼:

func retrieveItems() {
        
  guard let userId = Auth.auth().currentUser?.uid else { return }

  let ref = Database.database().reference().child("users/\(userId)/Favourited")
        
   ref.observe(.value, with: { (snapshot) in
    if snapshot.childrenCount>0 {
       self.favUsers.removeAll()
       for likes in snapshot.children.allObjects as! [DataSnapshot] {
       let likesObject = likes.value as? [String: AnyObject]
       let itemName = likesObject!["itemName"]
       let likesList = Names(id: likes.key, itemName: itemName as! String?)
       self.favUsers.append(likesList)
  }
  } else {
    print("not yet")
  }
  })
    self.favList.reloadData()
  }

有人可以看看讓我知道我可能做錯了什么嗎? 謝謝!

發生這種情況是因為 Firebase 異步加載數據,現在您在self.favUsers.append(likesList)運行之前調用reloadData

reloadData的調用需要在數據從 Firebase 返回時調用的關閉/完成處理程序內:

ref.observe(.value, with: { (snapshot) in
  if snapshot.childrenCount>0 {
     self.favUsers.removeAll()
     for likes in snapshot.children.allObjects as! [DataSnapshot] {
       let likesObject = likes.value as? [String: AnyObject]
       let itemName = likesObject!["itemName"]
       let likesList = Names(id: likes.key, itemName: itemName as! String?)
       self.favUsers.append(likesList)
    }
    self.favList.reloadData() // 👈 Move this here
  } else {
    print("not yet")
  }
})

我還建議查看Firebase 中的異步數據加載中的一些答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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