致命错误 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
GeneratedPluginConstraint,致命错误:找不到模块“firebase_auth”@import firebase_auth;
Firebase,地图错误:libc 致命信号 libart.so FinalizerDaemon