2017-12-19 13 views
1

テーブルビューにプロトタイプのセルが表示されないという問題があります。各セルと識別子の名前を正しく指定しました。 (ありがとう!)テーブルビューでfirebaseユーザが表示されない

import UIKit 
import Firebase 
import FirebaseDatabase 
class UsersTableViewController: UITableViewController { 



@IBOutlet var tableview: UITableView! 

var ref: DatabaseReference! 

var user = [User]() 


override func viewDidLoad() { 
    super.viewDidLoad() 
    getusers() 
    // Do any additional setup after loading the view. 
} 

func getusers() { 
    let ref = Database.database().reference() 

    ref.child("users").child(Auth.auth().currentUser!.uid).queryOrderedByKey().observeSingleEvent(of: .value, with: { (snapshot) in 

     let users = snapshot.value as? [String : AnyObject] ?? [:] 

     for (_, value) in users 
     { 
      if let uid = users["uid"] as? String 
      { 
       if uid != Auth.auth().currentUser!.uid 
       { 
        let showUser = User() 

        if let fullname = users["fullname"] as? String, let imagePath = users["urlImage"] as? String 
        { 
         showUser.fullname = fullname 
         showUser.imagePath = imagePath 
         showUser.userID = uid 
         self.user.append(showUser) 
        } 

       } 


      } 

     } 
     self.tableview.reloadData() 
    }) 

    ref.removeAllObservers() 
} 

override func numberOfSections(in tableview: UITableView) -> Int { 
    return 1 
} 

override func tableView(_ tableview: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 


    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! UserCell 

    cell.nameLabel.text = self.user[indexPath.row].fullname 
    cell.UserID = self.user[indexPath.row].userID 
    cell.userImage.downloadImage(from: self.user[indexPath.row].imagePath!) 
    checkFollowing(indexPath: indexPath) 

    return cell 
} 

override func tableView(_ tableview: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return user.count 
} 


override func tableView(_ tableview: UITableView, didSelectRowAt indexPath: IndexPath) { 

    let uid = Auth.auth().currentUser!.uid 
    let ref = Database.database().reference() 
    let key = ref.child("users").childByAutoId().key 

    var isFollower = false 

    ref.child("users").child(uid).child("following").queryOrderedByKey().observeSingleEvent(of: .value, with: { snapshot in 

     if let following = snapshot.value as? [String : AnyObject] { 
      for (ke, value) in following { 
       if value as! String == self.user[indexPath.row].userID { 
        isFollower = true 

        ref.child("users").child(uid).child("following/\(ke)").removeValue() 
        ref.child("users").child(self.user[indexPath.row].userID).child("followers/\(ke)").removeValue() 

        self.tableview.cellForRow(at: indexPath)?.accessoryType = .none 
       } 
      } 
     } 
     if !isFollower { 
      let following = ["following/\(key)" : self.user[indexPath.row].userID] 
      let followers = ["followers/\(key)" : uid] 

      ref.child("users").child(uid).updateChildValues(following) 
      ref.child("users").child(self.user[indexPath.row].userID).updateChildValues(followers) 

      self.tableview.cellForRow(at: indexPath)?.accessoryType = .checkmark 
     } 
    }) 
    ref.removeAllObservers() 

} 


func checkFollowing(indexPath: IndexPath) { 
    let uid = Auth.auth().currentUser!.uid 
    let ref = Database.database().reference() 

    ref.child("users").child(uid).child("following").queryOrderedByKey().observeSingleEvent(of: .value, with: { snapshot in 

     if let following = snapshot.value as? [String : AnyObject] { 
      for (_, value) in following { 
       if value as! String == self.user[indexPath.row].userID { 
        self.tableview.cellForRow(at: indexPath)?.accessoryType = .checkmark 
       } 
      } 
     } 
    }) 
    ref.removeAllObservers() 

} 



override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


/* 
// MARK: - Navigation 

// In a storyboard-based application, you will often want to do a little preparation before navigation 
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
// Get the new view controller using segue.destinationViewController. 
// Pass the selected object to the new view controller. 
} 
*/ 

} 

私は、現在のユーザーのストレージのためのGoogleのFirebase APIを使用しています:ここに私の現在のコードです。このコードでは、ユーザーをテーブルビューにフェッチしようとしていますが、テーブルビューには情報が表示されません。あなたが助けることができるならば、事前にありがとう!

+0

この 'self.user.append(showUser)'はいつでも呼び出されていますか?あなたはチェックしましたか? – Oxthor

+0

@Oxthorこんにちは!私は迅速にすごく新しいです。私はその質問を完全に理解していません。しかし、user.countを使って行を追加する必要があるユーザー配列にユーザー情報を追加していることはわかっています。 –

答えて

0

ref.removeAllObservers()行を削除します。メソッドobserveSingleEventは、完了の実行後にobserverを自動的に削除します。したがって、あなたの場合、ref.removeAllObservers()は、完了呼び出しの前にそれらを削除することができ、したがって、完了したコードは実行されません。

+0

申し訳ありません、ご提案ありがとうございます。しかし、私はあなたが示唆したことを試みたが、私のテーブルビューはまだすべてのセルを表示していません。 –

関連する問題