我正在Swift构建一个应用程序,我有一个简单的问题。
当用户进入某个位置时(例如商店),我希望它在UITableView中显示保存在Firebase数据库中的项目列表(可以在不同的位置变化)。
我之前在Swift中做了一些位置的东西,但没有这样的。
非常感谢帮助! br />
非常感谢,你杰克。
{
"venues" : {
"CrokePark" : {
"beverages" : {
"drink1" : "Coca-Cola",
"drink2" : "Fanta",
"drink3" : "Dr. Pepper"
},
"orders" : {
"Fanta" : {
"addedByUser" : "test2@test.com",
"completed" : false,
"name" : "Aaron"
},
"Coca-Cola" : {
"addedByUser" : "test@test.com",
"completed" : false,
"name" : "Jake"
}
}
}
}
}
答案 0 :(得分:1)
为了实现您的目标,您通常希望拥有存储在数据库中的咖啡馆的确切位置,即(纬度,经度)。所以你的场地结构看起来像这样
"venues" : {
"CrokePark" : {
"latitude": 37.335556, // this is a double
"longitude": -122.009167 // this is a double
"beverages" : {
"drink1" : "Coca-Cola",
"drink2" : "Fanta",
"drink3" : "Dr. Pepper"
}
在此位置您需要担心检索。一般来说,您希望在特定半径范围内通知用户; r ,来自会场。记住两种方法
糟糕的电池耗尽方法
始终获取其当前位置的更新,查询数据库以查看其当前位置是否在 r 中。如果是,请通知他们,然后停止获取他们的位置并查询Firebase。
这种方法最容易实施,但如果您选择使用它,您真的必须与用户发生严重问题。
略有改进
let currentLocation = CLLocation2D()
let possibleDestinations = []
timer == expired
回滚到第1步时
currentLocation equal or close to any address in possibleDestinations
timer.invalidate()
并从possibleDestinations
显然第二种方法比第一种方法更复杂,但更方便用户使用;在电池消耗方面,效率很高。
旁注:
我分别将latitude
和longitude
个节点存储为Double
,因此您只需将它们传递到CLLocationDegrees
构造函数即可。更多info
由于您似乎对核心位置API相对较新,我建议您先创建一个辅助项目,然后了解如何在将其集成到应用程序之前执行地理围栏。 Current Location Tutorial。 Geofencing Tutorial