如何从tableview单元格到视图控制器之间从firebase传递数据?

时间:2017-05-01 17:17:05

标签: ios swift uitableview firebase

嗨,大家好我在尝试将数据从tableview传递到另一个视图控制器时遇到了麻烦。我有一个tableview,显示每个用户的列表,但是当我点击一个用户时,它会转到下一个视图控制器而不显示该特定用户的任何数据。下面的代码与我所遵循的示例完全相同,但由于某种原因它不适合我。请帮忙,我已经尝试过寻找解决方案但却无法找到任何解决方案。我还使用firebase来存储和检索我的数据。提前致谢

@IBOutlet weak var searchTableView: UITableView!
var profiles = [user]()
var ref: FIRDatabaseReference!

override func viewdidload(){
 databaseRef = FIRDatabase.database().reference()
}

 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    performSegue(withIdentifier: "guestSegue", sender: self)
    self.searchTableView.deselectRow(at: indexPath as IndexPath, animated: true)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "guestSegue" {
        if let indexpath = searchTableView.indexPathForSelectedRow {
            let guestVC = segue.destination as! guestProfileViewController
            guestVC.ref = profiles[indexpath.row].ref


        }
    }
}

用户数组

class User {

var backgroundProfileImage: String!
var fullName: String!
var profilePic: String!
var ref: FIRDatabaseReference!
var key: String

init(backgroundProfileImage: String, fullName: String, profilePic: String, key: String = ""){



    self.backgroundProfileImage = backgroundProfileImage
    self.fullName = fullName
    self.profilePic = profilePic
    self.key = key
    self.ref = FIRDatabase.database().reference()

}

init(snapshot: FIRDataSnapshot){


    self.backgroundProfileImage = value["backgroundProfileImage"] as! String!
    self.fullName = (snapshot.value as! NSDictionary)["fullName"] as! String
    self.profilePic = (snapshot.value as! NSDictionary)["profilePic"] as! String
    self.uid = (snapshot.value as! NSDictionary)["uid"] as! String!
    self.key = snapshot.key
    self.ref = snapshot.ref

}

guestViewController

class guestProfileViewController: UIViewController, UINavigationControllerDelegate {

    @IBOutlet weak var profileImage: UIImage!

    @IBOutlet weak var backgroundProfileImage: UIImageView!

    @IBOutlet weak var fullNameLabel: UILabel!

    var ref: FIRDatabaseReference?

    override func viewDidLoad() {
        super.viewDidLoad()

    ref = FIRDatabase.database().reference()

    loadProfileData()

    }

func loadProfileData(){

    if let ref = ref {

    ref.observe(.value, with: { (user) in

        let user: User = User(snapshot: user)


                self.fullNameLabel.text = user.fullName

                self.profileImage.sd_setImage(with: URL(string: user.profilePic), placeholderImage: UIImage(named: "default"))

                self.backgroundProfileImage.sd_setImage(with: URL(string: user.backgroundProfileImage), placeholderImage: UIImage(named: "default_1"))
                })


            }

        }

    }

1 个答案:

答案 0 :(得分:2)

ref正在guestProfileViewController的viewDidLoad()中设置。尝试删除该位,因为您似乎希望ref等于用户的参考号。