在我的应用程序中,我正在使用webview,我传递了一个包含用户的Lat / Lng的URL。当应用开始时,我startUpdatingLocation
并听取CLLocationManager
委托方法didUpdateLocations
,以使用此方法中提供的坐标初始化网页视图。有一个开关可以确保webview只初始化一次。
问题是这似乎不可靠 - 有时从关闭启动应用程序时,不会触发此方法。这很奇怪,因为大部分时间确实有效。
我注意到如果我在模拟器中更改位置,那么它将触发该方法,但显然这是一种解决方法,而不是解决问题。
这让我觉得这可能是因为位置没有改变,但那我怎么能得到之前的位置坐标呢?
如果它有帮助,我很乐意发布一些代码片段。
非常感谢任何想法 - 谢谢!
要求的附加代码:
初始化位置管理器的功能:
func setupLocationManager() {
locationManager!.delegate = self
locationManager!.distanceFilter = kCLDistanceFilterNone
locationManager!.desiredAccuracy = kCLLocationAccuracyBest
locationManager!.startUpdatingLocation()
print("Start updating location...")
}
在loadView()
中调用:
override func loadView() {
super.loadView()
locationManager = CLLocationManager()
locationManager?.requestWhenInUseAuthorization()
if CLLocationManager.locationServicesEnabled() {
setupLocationManager()
}
//... other code
}
在我发布代码时,这是didUpdateLocations()
方法:
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let coords = manager.location?.coordinate
if !webViewStarted {
webViewStarted = true
startWebView(coords!)
} else {
updateUserLocation(coords!)
}
}
didChangeAuthorizationStatus
代码:
func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
var allow = false
var message = ""
switch status {
case CLAuthorizationStatus.Restricted:
message = "Restricted Access to location"
case CLAuthorizationStatus.Denied:
message = "User denied access to location"
case CLAuthorizationStatus.NotDetermined:
message = "Status not determined"
default:
print("Allowed to location Access")
allow = true
}
if (allow == true) {
setupLocationManager()
} else {
message = "\(message) \r\n This app requires location services to use"
let alertView = UIAlertController(title: "Error getting location", message: message, preferredStyle: UIAlertControllerStyle.Alert)
let cancel = UIAlertAction(title: "Okay", style: .Cancel, handler: nil)
alertView.addAction(cancel)
self.presentViewController(alertView, animated: true, completion: nil)
}
}