位置更新无法正常工作
即使用户退出视图并返回到上一个视图,我仍尝试进行位置更新。 为了做到这一点,我创建了一个独立的类来处理我的位置更新,但我遇到了奇怪的行为。位置更新无法正常工作
首先,我的授权请求只是弹出一瞬间,然后消失,所以我将其移回实际视图。 但是,我的位置更新仍然无法正常工作。 位置图标出现在设备上,但它永远不会进入didLocationUpdate功能。它也没有输入didFailWithError。 我很新的iOS,所以我不知道我做错了什么。
这里是我的类:
import CoreLocation
class RouteLocation: NSObject, CLLocationManagerDelegate{
var locationManager:CLLocationManager!
var databasePath = ""
override init(){
super.init()
let dirPaths =
NSSearchPathForDirectoriesInDomains(.DocumentDirectory,
.UserDomainMask, true)
let docsDir = dirPaths[0] as NSString
databasePath = docsDir.stringByAppendingPathComponent(
"\\firstAscent.db")
// For use in foreground
locationManager = CLLocationManager()
locationManager.requestWhenInUseAuthorization()
// locationManager.requestAlwaysAuthorization()
// print("in location")
if CLLocationManager.locationServicesEnabled() {
print("System Services enabled")
self.locationManager.delegate = self
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
self.locationManager.distanceFilter = 10
self.locationManager.startUpdatingLocation()
}
}
var isLocationMising = true
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let locValue:CLLocationCoordinate2D = manager.location!.coordinate
let latitute = locValue.latitude
let longitute = locValue.longitude
print("locations = \(locValue.latitude) \(locValue.longitude)") //continues to make SQL query calls
我把它从视图中使用:_ = RouteLocation()
- 的
requestWhenInUse...
功能异步运行。它将显示对话框,但同时继续处理其余的代码。即使其他所有内容都正确,您的应用也无法在第一次正确运行(授予权限时)。 - 你提供了
requestWhenInUseAuthorization
解释字符串吗? - 我认为你实例化运行init的类并立即死亡的方式。没有什么可以保留它。 因此无法调用
didUpdateLocation
。 - 如果您只需要一个位置,请致电
requestLocation
。
我已经多次运行该应用程序并且允许始终授权,因此第一个点不应该是个问题。我确实有请求授权说明字符串,它可以正常工作。对于第3点,你知道如何解决这个问题。我有一个评论,我应该分配我的RouteLocation作为我的AppDelegate的属性,但我不知道该怎么做。此外,我不想永远运行本地化请求,只要收集足够精确的位置以添加到数据库即可。 – Xitcod13
@ Xitcod13不是现在,但第一次有人安装它不会正常工作。为了保留这个对象,例如在AppDelegate中创建一个属性'let routeLocation = RouteLocation()',怎么样?如果您只需要一个位置条目,请考虑'requestLocation'。 – MirekE
我可能不得不重构我的整个设计。只要有人进入我的视图,我就需要该位置开始更新,因为我知道他们正试图将该位置添加到数据库。我将它放在单独的课程中的原因是,除了单击完成添加位置按钮之外,即使仍然可以继续收集位置,视图也会消失。因此,在AppDelegate中使用RouteLocation()将无法工作,除非我以某种方式从视图类中启动并停止它。 (并且能够同时拥有多个routeLocation实例也是有帮助的) – Xitcod13
http://stackoverflow.com/a/38961606/6297658 – Dravidian
我忘了提及这个确切的代码工作时,它是视图类的一部分。 – Xitcod13
你不会在你分配'RouteLocation'实例的地方显示代码,但是从你的描述中,你听起来像是在一个局部变量中分配它。只要该函数退出,局部变量就会释放,这意味着您的CLLocationManager实例被释放。您应该将您的'RouteLocation'对象分配为您的AppDelegate的属性,或者将其设置为一个单独的对象,以使其生命周期更长 – Paulw11