从 FirebaseDB 获取价值

Posted

技术标签:

【中文标题】从 FirebaseDB 获取价值【英文标题】:Getting Value From FirebaseDB 【发布时间】:2017-04-28 14:37:07 【问题描述】:

我试图从我的 firebasedb 中获取值,在运行时,ref.observeSingleEvent(of: .value, with: snapshot in 导致致命错误 unexpectedly found nil while unwrapping an Optional value。我敢肯定你能说出来......我不知道我在做什么......提前谢谢你......

func geths() -> Int
    var sch:Int = 0
    var nam:String = ""
    print("start geths")
    ref.observeSingleEvent(of: .value, with:  snapshot in
        if (snapshot.exists())
            print("snapexist")
            if let snapval = snapshot.value as? [String:AnyObject]
                let hs = snapval["hs"] as? String
                let name = snapval["name"] as? String
                self.hso = hs!
                self.nameo = name!
                nam = self.nameo
                if let myNumber = NumberFormatter().number(from: self.hso) 
                    let i = myNumber.intValue
                    sch = i
                else
                    sch = 0
                
            else
                print("error")
            
        else
            print("error")
        
    )
    return sch

编辑************ 仍然不起作用:(同样的错误

func geths() -> Int
        var sch:Int = 0
        var nam:String = ""
        print("start geths")
        ref.observeSingleEvent(of: .value, with:  (snapshot) in
            if (snapshot.exists())
                print("snapexist")
                let snapval = snapshot.value as? NSDictionary
                let hs = snapval?["hs"] as? String ?? ""
                let name = snapval?["name"] as? String ?? ""
                if (hs != nil)
                    self.hso = hs
                else
                    self.hso = "0"
                
                if (name != nil)
                    self.nameo = name
                else
                    self.nameo = "bob"
                
                nam = self.nameo
                if let myNumber = NumberFormatter().number(from: self.hso) 
                    let i = myNumber.intValue
                    sch = i
                else
                    sch = 0
                
            else
                print("error")
            
        )
        return sch
    

【问题讨论】:

首先,您的 print("snapexist") 是错误的,因为在这一行上它是不正确的,请使用 snapshot.exists() 检查。发生致命错误,因为您尝试使用 !一个为零的值。我认为是因为 hs 或 name 为 nil 现在看起来好多了:) @Retterdesdialogs 我现在该怎么办? @Likas,你如何初始化你的 firebase 引用,即“ref”? @prabhu var ref: FIRDatabaseReference! 【参考方案1】:

像这样创建 firebase 参考:

var ref: FIRDatabaseReference!

ref = FIRDatabase.database().reference()

更多详情请点击此链接: https://firebase.google.com/docs/database/ios/read-and-write

【讨论】:

【参考方案2】:

你必须初始化 ref 变量,你只是声明它

var ref: FIRDatabaseReference!

例如

var ref: FIRDatabaseReference! = FIRDatabase.database().reference(withPath: "hs")

您可以在此处阅读有关使用 Firebase 的示例: https://www.raywenderlich.com/139322/firebase-tutorial-getting-started-2

【讨论】:

以上是关于从 FirebaseDB 获取价值的主要内容,如果未能解决你的问题,请参考以下文章

从 Firebase 数据库中获取价值

如何从 Xamarin 中的 Firebase 获取价值?

Firebase 从数据库中获取价值

Android,从 firebase 数据库中获取价值

无法从Firebase获取价值

如何从 Firebase 数据库中的 autoID 获取价值 - Swift