Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 获取存储在firebase中的数据值_Ios_Swift_Firebase_Firebase Realtime Database_Ios Lifecycle - Fatal编程技术网

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

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

我试图访问firebase dashboard中存储的值,以便在类中的不同函数和方法中使用它们

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

实际上他们不是零! 我在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)

}
为什么我会在这里撞车

更改
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...

       }

  }