【问题标题】:How to save GeoFire with Firebase properties in Swift?如何在 Swift 中使用 Firebase 属性保存 GeoFire?
【发布时间】:2016-02-07 13:00:32
【问题描述】:

我正在尝试保存一个包含名称字符串、地址字符串和位置坐标的对象。在文档中,似乎有一种方法可以保存 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!")
      }
  }

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

【问题讨论】:

    标签: ios swift firebase geofire


    【解决方案1】:

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

    Firebase 最近添加了write to multiple locations with a single update() call 的功能。有了它,您可以在一次调用中同时编写地理位置和实体。如果你想这样做,你必须更改 GeoFire 以允许它。

    【讨论】:

    • 我在代码的其他地方使用了多个更新调用,所以这不是问题。更改 GeoFire 是什么意思?
    • 要允许来自您的应用程序和来自 GeoFire 的写入发生在单个 update() 调用中,需要更改您的应用程序代码和 GeoFire 的代码。由于 GeoFire 是开源的,您可以克隆/分叉存储库并自己进行更改。
    • 啊,好像有点过头了,我可以解决它。很高兴在未来的想法中看到这样的功能!
    • 肯定会的。随时向 repo 添加功能请求。
    • @FrankvanPuffelen 嗨,我现在也在努力解决这个问题,如果你有时间的话——你介意快速查看一下我的question 吗?
    【解决方案2】:

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

    【讨论】:

    • 或将出现的非法字符替换为不太可能的字符,如 - 或 ^
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    相关资源
    最近更新 更多