我正在尝试保存包含名称字符串,地址字符串和位置坐标的对象。在文档中,似乎有一种方法可以保存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)
GeoFire:
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!")
}
}
是否可以在同一请求中保存位置和其他数据?我想在同一个请求中执行此操作,因为如果位置请求失败,我不希望用户能够创建没有位置数据的对象。或者是否存在另一种明智的方式来施加限制?
答案 0 :(得分:0)
由于编写原始实体及其地理位置是两个单独的调用,因此它们将是两个单独的写操作。其中一个写操作由您的代码完成,另一个由GeoFire完成。两个调用都写入JSON树的不同部分。
Firebase最近添加了write to multiple locations with a single update()
call的功能。有了它,您可以在一次调用中编写地理位置和实体。如果你想这样做,你必须改变GeoFire以允许它。
答案 1 :(得分:0)
我在寻找解决方案时也一直在努力,最后采取了非正统的方法。我为输入的GeoFire密钥创建了自己的关键标题。几乎像汽车的vin。第一个字符是一个定义我要使用的注释的数字。下一组数字是在发布时生成的日期,在日期是一串用户数据之后,因为该文本的长度无关紧要。这就是关键。在我的地图应用程序中,然后调用标题键,我将标题检索为字符串并将其剪切。某些字符不允许出现在GeoFire键标题中,因此您必须限制用户输入这些字符。