1

我正在尝试保存一个包含名称字符串、地址字符串和位置坐标的对象。在文档中,似乎有一种方法可以保存 firebase 数据,另一种方法可以保存 GeoFire 数据。

火力基地:

  var alanisawesome = ["full_name": "Alan Turing", "date_of_birth": "June 23, 1912"]
  var gracehop = ["full_name": "Grace Hopper", "date_of_birth": "December 9, 1906"]
  var usersRef = ref.childByAppendingPath("users")
  var users = ["alanisawesome": alanisawesome, "gracehop": gracehop]
  usersRef.setValue(users)

地火:

  let geofireRef = Firebase(url: "https://<your-firebase>.firebaseio.com/")
  let geoFire = GeoFire(firebaseRef: geofireRef)
  geoFire.setLocation(CLLocation(latitude: 37.7853889, longitude: -122.4056973), forKey: "firebase-hq") { (error) in
      if (error != nil) {
         println("An error occured: \(error)")
      } else {
         println("Saved location successfully!")
      }
  }

是否可以在同一个请求中同时保存位置和其他数据?我想在同一个请求中执行此操作,因为如果位置请求失败,我不希望用户能够创建没有位置数据的对象。还是有另一种聪明的方法来施加这种限制?

4

2 回答 2

0

我也在为解决这个问题而苦苦挣扎,最终我采取了一种非正统的方法。我为输入的 GeoFire 密钥创建了自己的密钥标题。几乎就像汽车的vin。第一个字符是定义我要使用的注释的数字。下一组数字是发布时生成的日期,日期之后是一串用户数据,因为该文本的长度无关紧要。这是关键。然后在我的地图应用程序中调用标题键,我将标题作为字符串检索并剪切。某些字符不允许出现在 GeoFire 键标题中,因此您必须限制用户输入这些字符。

于 2017-01-27T02:28:16.057 回答
0

由于写入原始实体及其地理位置是两个单独的调用,因此它们将是两个单独的写入操作。其中一项写入由您的代码完成,另一项由 GeoFire 完成。两个调用都写入 JSON 树的不同部分。

Firebase 最近增加了通过一次调用写入多个位置的功能update()。有了它,您可以在一次调用中同时编写地理位置和实体。如果你想这样做,你必须改变GeoFire以允许它。

于 2016-02-07T16:07:06.167 回答