0
所以我創建我的應用程序內部的論壇,並在數據庫中獲取的主題時,我還需要獲取像圖片和樓主的用戶名某些用戶信息,以把它放在表視圖細胞。取火力地堡裏面另一個獲取
爲了保持保持火力地堡數據庫平我的郵件在一個單獨的裁判由項,而不作爲主題的孩子可搜索的建議。
,因爲如果用戶更改其用戶名或個人資料圖片,我需要改變它,他曾參加過以及每個主題我不能讓像opImage和opUsername爲主題的孩子的。
處理這個問題的最佳方法是什麼?
的方法,從火力地堡獲取將是這個樣子。該實現的問題在於,Firebase調用是異步的,不能保證圖像會附加到正確的主題。
DataService.ds.Topics_Base.child(cat.key!).observeSingleEvent(of:.value, with: { (snapshot) in
if let snapshots = snapshot.children.allObjects as? [FIRDataSnapshot] {//snapshots = all topics
for top in snapshots{
if let dict = top.value as? Dictionary<String,AnyObject>{
guard let title = dict["title"] as? String,let text = dict["text"] as? String,let time = dict["time"] as? String,let username = dict["username"] as? String,let timeSimple = dict["time-simple"] as? String,let lastPost = dict["last-post"] as? String,let open = dict["open"] as? Bool else{
continue
}
let newTopic = Topic(subject: title, text: text, time: time, topicKey: top.key, username: username)
self.allTopics.append(newTopic)
print(self.allTopics.count)
if let email = dict["email"] as? String{
//FETCH USER INFO FROM EMAIL FETCHED
let validEmail = HelperMethods.removeSpecialCharactersFromEmail(email: email)
DataService.ds.Users_Base.child(validEmail).observeSingleEvent(of: .value, with: {(snapshot) in
if let userDict = snapshot.value as? Dictionary<String,AnyObject>{
if let imgUrl = userDict["profile_image_url"] as? String{
self.allTopics[currentIndex].opImageUrl = imgUrl
}
self.allTopics.append(newTopic)
if (totalTopics == snapshots.count){
DispatchQueue.main.async {
self.allTopics.sort { $0.lastPostTime! > $1.lastPostTime!}
self.tableView.reloadData()
self.refreshControl.endRefreshing()
}
}
}
})
}
} }
}
}
)
}
在此先感謝。