Xcode 从Firebase数据库检索数据:发送到实例的选择器无法识别
我有一个Firebase数据库,如下所示: 我在保存到数据库时没有问题,但当我尝试以以下方式检索数据时:Xcode 从Firebase数据库检索数据:发送到实例的选择器无法识别,xcode,swift,firebase,firebase-realtime-database,Xcode,Swift,Firebase,Firebase Realtime Database,我有一个Firebase数据库,如下所示: 我在保存到数据库时没有问题,但当我尝试以以下方式检索数据时: //Properties @IBOutlet weak var bike1LBL: UILabel! @IBOutlet weak var bike2LBL: UILabel! @IBOutlet weak var bike3LBL: UILabel! @IBOutlet weak var bike4LBL: UILabel! @IBOutlet weak var chainLBL: UI
//Properties
@IBOutlet weak var bike1LBL: UILabel!
@IBOutlet weak var bike2LBL: UILabel!
@IBOutlet weak var bike3LBL: UILabel!
@IBOutlet weak var bike4LBL: UILabel!
@IBOutlet weak var chainLBL: UILabel!
@IBOutlet weak var brakeLBL: UILabel!
@IBOutlet weak var locationLBL: UILabel!
@IBOutlet weak var phoneLBL: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
var ref = Firebase(url:"sdfghjkl/firebaseio.com/Order/")
// Retrieve new posts as they are added to database
ref.observeEventType(.ChildAdded, withBlock: { snapshot in
let road = snapshot.value.objectForKey("Bike-Type1") as? String
self.bike1LBL.text = road
let city = snapshot.value.objectForKey("Bike-Type2") as? String
self.bike2LBL.text = city
let mountain = snapshot.value.objectForKey("Bike-Type3") as? String
self.bike3LBL.text = mountain
let christiania = snapshot.value.objectForKey("Bike-Type4") as? String
self.bike4LBL.text = christiania
let chain = snapshot.value.objectForKey("Chain") as? String
self.chainLBL.text = chain
let brake = snapshot.value.objectForKey("Brake") as? String
self.brakeLBL.text = brake
let location = snapshot.value.objectForKey("Location") as? String
self.locationLBL.text = location
let phone = snapshot.value.objectForKey("Phone") as? String
self.phoneLBL.text = phone
print(snapshot.value)
})
}
应用程序崩溃,我收到此错误消息,但我从调试器得到的仅此而已:
如果您更新到新的Firebase 3.0 api并查看关于Firebase和查询(在Kotlin中,但“看起来像”Swift)会更好,并且可能会有所帮助如果您更新到新的Firebase 3.0 api并查看关于Firebase和查询(在Kotlin中,但“看起来像”Swift)会更好并可能从以下方面提供帮助: 您可以使用FIRDataEventTypeValue事件以一次读取数据 事件发生时存在的给定路径。这种方法是可行的 连接侦听器时触发一次,每次 数据(包括任何子项)发生更改向事件回调传递一个 包含该位置所有数据的快照,包括子数据。 因此,
snapshot
实际上是顺序中的一些对象的数组,而不仅仅是最近添加的对象。尝试获取最后一个对象,然后从中获取数据:
ref.observeEventType(.ChildAdded, withBlock: { snapshot in
let entry = (snapshot as! NSArray).lastObject as! NSDictionary
let road = entry.objectForKey("Bike-Type1") as? String
self.bike1LBL.text = road
})
从:
您可以使用FIRDataEventTypeValue事件以一次读取数据
事件发生时存在的给定路径。这种方法是可行的
连接侦听器时触发一次,每次
数据(包括任何子项)发生更改向事件回调传递一个
包含该位置所有数据的快照,包括子数据。
因此,snapshot
实际上是顺序中的一些对象的数组,而不仅仅是最近添加的对象。尝试获取最后一个对象,然后从中获取数据:
ref.observeEventType(.ChildAdded, withBlock: { snapshot in
let entry = (snapshot as! NSArray).lastObject as! NSDictionary
let road = entry.objectForKey("Bike-Type1") as? String
self.bike1LBL.text = road
})
从您看到的情况来看,代码访问的属性似乎在JSON中。您是否在调试器中单步检查了代码以查看是哪个objectForKey()
导致了问题?感谢您的快速响应@Frank van Puffelen!我已经编辑了这篇文章,我希望它现在能提供更多的信息,但我仍然无法找出导致崩溃的键。有一个对象是NSArray
,而不是你认为的NSDictionary
。很难说是哪一个,您必须使用断点或至少printf来知道哪一个可能是罪魁祸首。请避免屏幕截图,而是复制/粘贴错误消息。我为每个常数设置了断点,我将为其指定特定键的值,这就是调试区域的外观:快照FDataSnapshot!0x00007fb50b470740,自助信使应用程序。主视图控制器0x00007fb50b5c7960,道路字符串?一些,城市字符串?“一些,山地字符串?一些,克里斯蒂安字符串?一些,链字符串?一些,制动字符串?一些,位置字符串?无法读取数据一些,\u core\u StringCore\u baseAddress COpaquePointer 0x000000000000ffff\u countAndFlags UInt 1\u owner AnyObject?nil None phone String?从您看到的一些情况来看,代码访问的属性似乎在JSON中。您是否在调试器中单步检查了代码以查看是哪个objectForKey()
导致了问题?感谢您的快速响应@Frank van Puffelen!我已经编辑了这篇文章,我希望它现在能提供更多的信息,但我仍然无法找出导致崩溃的键。有一个对象是NSArray
,而不是你认为的NSDictionary
。很难说是哪一个,您必须使用断点或至少printf来知道哪一个可能是罪魁祸首。请避免屏幕截图,而是复制/粘贴错误消息。我为每个常数设置了断点,我将为其指定特定键的值,这就是调试区域的外观:快照FDataSnapshot!0x00007fb50b470740,自助信使应用程序。主视图控制器0x00007fb50b5c7960,道路字符串?一些,城市字符串?“一些,山地字符串?一些,克里斯蒂安字符串?一些,链字符串?一些,制动字符串?一些,位置字符串?无法读取数据一些,_core _StringCore _baseaddresscopaqueinter 0x000000000000ffff _countandflagsuint 1 _owneranyobject?nil None phone String?Some,