获取存储在 firebase 中的数据值
Posted
技术标签:
【中文标题】获取存储在 firebase 中的数据值【英文标题】:Getting the values of data stored in firebase 【发布时间】:2016-09-21 14:47:56 【问题描述】:我正在尝试访问存储在 firebase 仪表板中的值,以便在类中的不同函数和方法中使用它们。
I used this method in this question
我试图打印他们的值,整个应用程序崩溃了,它给了我他们的 nil!
它们实际上不是零! 我在 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)
为什么我会在这里崩溃!
【问题讨论】:
哪一行崩溃了?提到它在哪里工作和在哪里崩溃! 没有特定的行。但是整个应用程序崩溃 整个应用崩溃是什么意思? 【参考方案1】:更改ref.child(byAppendingPath: self.strUserid as String)
收件人:-
ref.child(self.strUserid)
同时删除let refer = FIRDatabase.database().reference().child("UserDevices")
。
你不能在一个范围之外全局初始化你的引用,因为你不知道你的类被初始化的顺序,并且可能的情况是你的 FIRDatabase 甚至还没有被初始化你尝试初始化let refer
。
retrieveUserData
中的 refer
使用
FIRDatabase.database().reference().child("UserDevices")
您在 viewController 的 LIFE CYCLE 中看到,viewdidLoad 比 viewWillAppear 被调用之前: p>
所以你需要的是:-
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...
阅读:Viewcontroller's Lifecycle
【讨论】:
我在检索值时仍然遇到问题! 你在这儿吗? 尝试在self.DeviceDetailsImageView.downloadedFrom(link: globalImageUrl)
之前打印您的全局变量并检查您是否获得了这些值。如果没有,请检查您的参考路径和您的数据库。以上是关于获取存储在 firebase 中的数据值的主要内容,如果未能解决你的问题,请参考以下文章
在 Flutter 中将 Firebase 数据作为 Listview 构建器获取
如何在 swift 4.0 中获取 firebase-realtime-database 中的特定值