我正在尝试从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/

10-11 14:52