我試圖從firebase中獲取數據並傳遞給tableview。在正確的地方調用reloadData()
// Model
import UIKit
import Firebase
struct ProfInfo {
var key: String
var url: String
var name: String
init(snapshot:DataSnapshot) {
key = snapshot.key
url = (snapshot.value as! NSDictionary)["profileUrl"] as? String ?? ""
name = (snapshot.value as! NSDictionary)["tweetName"] as? String ?? ""
}
}
// fetch
var profInfo = [ProfInfo]()
func fetchUid(){
guard let uid = Auth.auth().currentUser?.uid else{ return }
ref.child("following").child(uid).observe(.value, with: { (snapshot) in
guard let snap = snapshot.value as? [String:Any] else { return }
snap.forEach({ (key,_) in
self.fetchProf(key: key)
})
}, withCancel: nil)
}
func fetchProf(key: String){
var outcome = [ProfInfo]()
ref.child("Profiles").child(key).observe(.value, with: { (snapshot) in
let info = ProfInfo(snapshot: snapshot)
outcome.append(info)
self.profInfo = outcome
self.tableView.reloadData()
}, withCancel: nil)
}
//tableview
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return profInfo.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "followCell", for: indexPath) as! FollowingTableViewCell
cell.configCell(profInfo: profInfo[indexPath.row])
return cell
}
但是它返回一行,但profInfo
實際上有兩行。當我在fetchProf
裏執行print(self.profInfo)
時,它返回兩個值。但傳遞給tableview後,它成爲一個。我不知道,但我想是因爲我把reloadData()
放在錯誤的地方,因爲我打中斷點和reloadData()
調用兩次。所以,我認爲profInfo
取代新的價值。我在不同的地方打電話,但沒有工作。我對麼?如果是這樣,我應該在哪裏撥打reloadData()
?如果我錯了,我該如何解決這個問題?先謝謝你!
當reloadData被調用兩次時,print(self.profInfo)在每種情況下都會打印什麼? –