致命错误Firebase快照

swift xcode firebase firebase-realtime-database

65 观看

3回复

114 作者的声誉

每次我运行此错误,我都会收到此错误:致命错误:

展开可选值时意外发现nil 2017-09-15 06:30:04.650075 + 0200 RollerBank [845:211470]致命错误:展开可选值时意外发现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)

                    }
                }
            })
        }

结构体

作者: Dani Kemper 的来源 发布者: 2017 年 9 月 15 日

回应 3


0

75 作者的声誉

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

if let itemDict = snapshot.value as? NSDictionary

您正在使itemDict成为整个对象的字典。因此,您没有密钥“ TypeControle”,而是具有生成的Firebase ID的密钥。您可以获取child.value以获取您正在寻找的字典。

if let itemDict = item.value as? NSDictionary
作者: TaylorRayHoward 发布者: 2017 年 9 月 15 日

0

8569 作者的声誉

决定

使用它来解析从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) 
            }
       }
    }
 }
作者: Surjeet 发布者: 2017 年 9 月 15 日

0

2076 作者的声誉

将代码更改为此:

for item in snapshot.children {

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

希望能帮助到你

作者: Vlad Pulichev 发布者: 2017 年 9 月 15 日
32x32