我正在尝试从firebase获取数据并传递到tableview。
// 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
实际上有两行。当我在print(self.profInfo)
内部实现fetchProf
时,它返回两个值。但在被传给tableview之后,它变成了一个。我不确定,但我想原因是我把reloadData()
放错了地方,因为我碰到了断点,然后reloadData()
打了两次电话。所以,我认为profInfo
被新值取代了。我在不同的地方打过电话,但是没有工作。我说的对吗?如果是,我应该打到哪里?如果我错了,我该怎么解决?提前谢谢你! 最佳答案
您需要将新数据附加到profinfo
数组。只需将fetchProf方法替换为:-
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.append(contentOf: outcome)
Dispatch.main.async{
self.tableView.reloadData()
}
} , withCancel: nil)
}
关于ios - 在正确的位置调用reloadData(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47994744/