Xcode 从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

我有一个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: 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,