获取存储在firebase中的数据的值

获取存储在firebase中的数据的值

问题描述:

我试图访问存储在firebase仪表板中的值以在类中的不同函数和方法中使用它们。获取存储在firebase中的数据的值

I used this method in this question

我试图打印他们的价值观,整个应用程序崩溃,它给了我,他们的零!

他们不是零! 我在viewDidLoad中使用了类似的方法,我可以检索值到标签!

let refer = FIRDatabase.database().reference().child("UserDevices") 

var globalEmail : String! 
var globalPhone : String! 
var globalImageUrl: String! 


override func viewWillAppear(_ animated : Bool){ 
    super.viewWillAppear(animated) 
    retrieveUserData{(email,phone,ImageUrl) in 
     self.globalEmail = email 
     self.globalPhone = phone 
     self.globalImageUrl = ImageUrl 
    } 

} 

func retrieveUserData(_ completionBlock : @escaping ((_ email : String?, _ phone : String?, _ ImageUrl: String?)->Void)){ 
    refer.child(byAppendingPath: self.strUserid as String).observe(.value , with: {snapshot in 
     if let userDict = snapshot.value as? [String:AnyObject] { 
      completionBlock(userDict["email"] as! String, userDict["phone"] as! String, userDict["ImageUrl"] as! String) 
     } 
    }) 
} 

var strUserid : NSString! 
override func viewDidLoad() { 
    super.viewDidLoad() 

    print(globalEmail) 
    print(globalImageUrl) 
    print(globalPhone) 

    self.navigationController?.navigationBar.tintColor = UIColor.white 

    print("idis \(self.strUserid)") 

    let ref = FIRDatabase.database().reference().child("UserDevices") 

    self.navigationController?.navigationBar.tintColor = UIColor.white 
    ref.child(byAppendingPath: self.strUserid as String).observe(.value, with: { snapshot in 

     if let dict = snapshot.value as? NSMutableDictionary{ 

      print("dict is \(dict)") 

      if let Provider = dict["name"] as? String 
      { 
       self.DeviceDetailsProvider.text = Provider 
       // self.navigationItem.title = Provider 
      } 
      if let name = dict["DeviceName"] as? String 
      { 
       self.DeviceDetailsName.text = name 
       self.navigationItem.title = name 
      } 
      if let ShortDescription = dict["Description"] as? String 
      { 
       self.DeviceDetailsDescription.text = ShortDescription 
      } 
      if let City = dict["city"] as? String 
      { 
       self.DeviceDetailsCity.text = City 
      } 

     } 
    }) 


    self.DeviceDetailsImageView.downloadedFrom(link: globalImageUrl) 

} 

为什么我会在这里发生故障!

+0

哪一行导致崩溃?提到它在哪里工作,哪里崩溃! – Santosh

+0

没有特定的线路。但整个应用程序崩溃 – Mariah

+0

你是什么意思整个应用程序崩溃? – Santosh

变化ref.child(byAppendingPath: self.strUserid as String)

要: -

ref.child(self.strUserid) 

同时删除let refer = FIRDatabase.database().reference().child("UserDevices")

您不能在范围外全局初始化您的引用,因为您不知道您的类正在初始化的顺序,可能的情况是您尝试初始化时尚未初始化您的数据库let refer

代替referretrieveUserData使用

FIRDatabase.database().reference().child("UserDevices") 

您在的viewController生命周期viewDidLoad中看到的是比viewWillAppear中调用之前:

所以你需要什么是: -

override func viewDidLoad() { 
super.viewDidLoad() 
    .. 
    retrieveUserData{(email,phone,ImageUrl) in 
    self.globalEmail = email 
    self.globalPhone = phone 
    self.globalImageUrl = ImageUrl 
    self.DeviceDetailsImageView.downloadedFrom(link: globalImageUrl) 
    // .. Do your stuff... 

     } 

    } 

enter image description here

阅读:Viewcontroller's Lifecycle

+0

我已经更新了我的答案。 – Dravidian

+0

答复已更新...有帮助吗? – Dravidian

+0

我仍然无法检索值! – Mariah