2017-08-08 44 views
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() 
            } 
           } 
          } 
         }) 
        } 
       }   } 
     } 
    } 
    ) 
} 

在此先感謝。

回答

0

我最終決定來獲取後獲取的所有主題,然後通過主題陣列循環和附加每個主題的用戶信息的用戶信息。

實施例:

1 - 獲取所有主題和創建陣列

2 - 在數組{

每個主題使用屬性等topic.email

集合上取火力地堡用戶例如:

topic.imageUrl = user.imageUrl

topic.username = user.username

}

重載表視圖