致命错误 Firebase 快照

Posted

技术标签:

【中文标题】致命错误 Firebase 快照【英文标题】:fatal error Firebase Snapshot 【发布时间】:2017-09-15 04:35:59 【问题描述】:

每次我运行这个我都会得到这个错误:致命错误:

在展开可选值时意外发现 nil 2017-09-15 06:30:04.650075+0200 RollerBank [845:211470] 致命错误:意外 在展开 Optional 值时发现 nil。

我不知道我做错了什么。有人能帮助我吗?

func reload()
            //get data
            Database.database().reference().child("Rollerbanken").observe(.value, with:  (snapshot) in



                for item in snapshot.children

                    if let itemDict = snapshot.value as? NSDictionary 


                        let annotation = MKPointAnnotation()


                        annotation.title = itemDict["TypeControle"] as! String
                        let tijd = itemDict["Tijd"] as! String
                        annotation.subtitle = "Geplaatst om \(tijd)"


                        let getLatitude = itemDict["Latitude"] as! Double
                        let getLongitude = itemDict["Longitude"] as! Double

                        annotation.coordinate = CLLocationCoordinate2D(latitude: getLatitude, longitude: getLongitude)

                        self.map.addAnnotation(annotation)

                    
                
            )
        

【问题讨论】:

你能粘贴“Rollerbanken”的结构吗? 我的问题更新了 【参考方案1】:

使用它来解析从 Firebase 接收到的值。

if let value = snapshot.value as? Dictionary<String, Any> 

    for key in value.keys 
            if let itemDict = value[key] as? Dictionary<String, AnyObject> 

                let annotation = MKPointAnnotation()
                annotation.title = itemDict["TypeControle"] as! String
                let tijd = itemDict["Tijd"] as! String
                annotation.subtitle = "Geplaatst om \(tijd)"

                let getLatitude = itemDict["Latitude"] as? String
                let getLongitude = itemDict["Longitude"] as? String
                if let lat = getLatitude, let long = getLongitude 
                    annotation.coordinate = CLLocationCoordinate2D(latitude: Double(lat), longitude: Double(long))

                  self.map.addAnnotation(annotation) 
            
       
    
 

【讨论】:

我现在有一个不同的错误:无法将类型“__NSCFString”(0x1b2ce3f70)的值转换为“NSNumber”(0x1b2cf0b38)。 2017-09-15 07:14:30.180612+0200 RollerBank [898:224284] 无法将“__NSCFString”(0x1b2ce3f70)类型的值转换为“NSNumber”(0x1b2cf0b38)。 您在哪一行收到此错误?还要检查一次您的数据类型。 我认为您在尝试获取纬度、经度时会收到此崩溃。根据您的数据库结构,它们是字符串值,而您将它们转换为 Double。 它们是 Double,我将它们转换为 String,否则我无法将它们保存在数据库中。 newStory.Latitude = String(lat) newStory.Longitude = String(long) 在线出错:let getLatitude = itemDict["Latitude"] as!双【参考方案2】:

我相信你的问题在于这条线

if let itemDict = snapshot.value as? NSDictionary

您正在使 itemDict 成为整个对象的字典。所以你没有“TypeControle”的键,你有一个生成的 Firebase id 的键。我相信你可以得到 child.value 来得到你正在寻找的字典。

if let itemDict = item.value as? NSDictionary

【讨论】:

我得到一个错误..:'Any'类型的值没有成员'value'【参考方案3】:

将您的代码更改为:

for item in snapshot.children 

    let snapshotValue = item.value as! [String: AnyObject]
    key  = snapshotValue["TypeControle"] as! String
    tijd = snapshotValue["tijd "] as! String
    // etc..

希望对你有帮助

【讨论】:

以上是关于致命错误 Firebase 快照的主要内容,如果未能解决你的问题,请参考以下文章

致命错误:找不到模块“firebase_auth”@import firebase_auth

致命错误:找不到模块“firebase_core”

GeneratedPluginConstraint,致命错误:找不到模块“firebase_auth”@import firebase_auth;

Firebase,地图错误:libc 致命信号 libart.so FinalizerDaemon

颤振:致命错误:找不到模块“firebase_analytics”

检索 Firebase 快照导致加载验证错误