Firebase数据检索 - 编辑注释

时间:2017-05-17 14:41:36

标签: swift firebase firebase-realtime-database annotations firebase-authentication

我目前正在开发一个用户可以在地图上保存注释的应用程序,这一切都很棒!地图位置,名称和副标题都被发送到数据库,并且引脚被放入地图中。

但是,我正在努力弄清楚如何从[Firebase] [1]中提取这些数据,以便用户能够编辑以前的信息然后更新它。

1 个答案:

答案 0 :(得分:2)

要读取数据,您需要使用firebase参考中的observe属性。这会返回由您的数据组成的snapshot

由于您的Skatepark类已经有快照构造函数,因此您只需将快照传递给它并创建对象。

reference.child("yourNode").observeSingleEvent(of: .value, with: { (snapshot) in

/* Two things can happen here. Snapshot can either consist of one element or multiple.
   To handle this, you want to iterate through the snapshot, create your Skatepark
   object and populate it into your global skatepark array.
*/

    if snapshot.value is NSNull
    {
        print("Error Getting Snapshot")
    }
    else
    {
        for (child in snapshot.children)
        {
            let snap = child as! FIRDataSnapshot
            let skateObject = Skatepark(child) // this calls the constructor which take snapshot as parameter
            globalSkateParkArray.append(skateObject)
        }
    }

})

要更新您的值,您只需要this

个人建议

  1. 考虑将coordinatenamesubtitle改为var而不是let
  2. 在将数据发送到数据库之前,请先考虑先从数据中创建一个Skatepark对象。这个构造函数应该做的伎俩

    init(coordinate: CLLocationCoordinate2D, name: String, subtitle: String, type: SkateboardType, editable: Bool)
    {
        self.coordinate = coordinate
        self.name = name
        self.subtitle = subtitle
        self.type = type
        self.editable = editable
    }
    
  3. 我在dictionary内创建一个Skatepark变量,用于从对象创建一个字典。这样我就不会在我的代码库中浮动["lat": locationManager.location?.coordinate.latitude, "lng": locationManager.location?.coordinate.longitude, "name": skateTitleText, "subtitle": skateStyleText, "type": (selected - 1), "editable": true]

  4. 所以在你的课堂上有这个

    var dictionary: [String:Any]
    {
        return
        [
            "lat": coordinate.latitude,
            "lng": coordinate.longitude,
            "name": title,
            "subtitle": subtitle,
            "type": type,
            "editable": editable
        ]
    }
    

    每当您想要从对象中删除字典时,只需使用object.dictionary