Ios 获取存储在firebase中的数据值
我试图访问firebase dashboard中存储的值,以便在类中的不同函数和方法中使用它们 我试图打印他们的值,整个应用程序崩溃了,它给了我他们的零 实际上他们不是零! 我在viewDidLoad中使用了类似的方法,我可以检索标签的值Ios 获取存储在firebase中的数据值,ios,swift,firebase,firebase-realtime-database,ios-lifecycle,Ios,Swift,Firebase,Firebase Realtime Database,Ios Lifecycle,我试图访问firebase dashboard中存储的值,以便在类中的不同函数和方法中使用它们 我试图打印他们的值,整个应用程序崩溃了,它给了我他们的零 实际上他们不是零! 我在viewDidLoad中使用了类似的方法,我可以检索标签的值 let refer = FIRDatabase.database().reference().child("UserDevices") var globalEmail : String! var globalPhone : String! var glob
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)
}
为什么我会在这里撞车 更改ref.child(通过将路径:self.strUserid附加为字符串)
致:
同时删除让refere=FIRDatabase.database().reference().child(“用户设备”)
您不能在作用域之外全局初始化引用,因为您不知道初始化类的顺序,可能的情况是,当您尝试初始化时,您的FIRDatabase甚至还没有初始化。请参阅
请参阅检索用户数据
中的而不是使用
您可以看到,在视图控制器的生命周期中,viewdidLoad在视图出现之前被调用:
因此,您需要的是:-
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...
}
}
阅读:更改ref.child(通过将路径:self.strUserid附加为字符串)
致:
同时删除让refere=FIRDatabase.database().reference().child(“用户设备”)
您不能在作用域之外全局初始化引用,因为您不知道初始化类的顺序,可能的情况是,当您尝试初始化时,您的FIRDatabase甚至还没有初始化。请参阅
请参阅检索用户数据
中的
而不是使用
您可以看到,在视图控制器的生命周期中,viewdidLoad在视图出现之前被调用:
因此,您需要的是:-
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...
}
}
阅读:哪一行正在崩溃?提到它在哪里工作,在哪里崩溃!没有具体的线路。但是整个应用程序崩溃你说的整个应用程序崩溃是什么意思?哪一行崩溃了?提到它在哪里工作,在哪里崩溃!没有具体的线路。但是整个应用程序崩溃你说的整个应用程序崩溃是什么意思?我仍然无法检索值!找到这里了吗?请在self.DeviceDetailsImageView.downloadedFrom(链接:globalImageUrl)
之前尝试打印全局变量,并检查是否获得了值。如果没有,请检查您的引用路径和数据库。我仍然无法检索这些值!找到这里了吗?请在self.DeviceDetailsImageView.downloadedFrom(链接:globalImageUrl)
之前尝试打印全局变量,并检查是否获得了值。如果没有,则检查您的参考路径和数据库。
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...
}
}