【发布时间】:2017-09-15 01:08:03
【问题描述】:
由于某种原因,didUpdateLocations 没有被调用,即使我将委托设置为视图控制器也是如此。在info.plist 中,我将键Privacy - Location When In Use Usage Description 设置为描述。所以我不确定我做错了什么?
import MapKit
import CoreLocation
class OptionsViewController: UIViewController, UITableViewDelegate, CLLocationManagerDelegate {
override func viewDidLoad() {
//Ask user for location
locationManager = CLLocationManager()
locationManager.requestWhenInUseAuthorization()
//Use users current location if no starting point set
if CLLocationManager.locationServicesEnabled() {
let locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.startUpdatingLocation()
}
}
override func viewDidAppear(_ animated: Bool) {
locationManager = CLLocationManager()
locationManager.requestWhenInUseAuthorization()
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error){
locationManager.stopUpdatingLocation()
print(error)
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
print("Did update location called?")
let locValue:CLLocationCoordinate2D = manager.location!.coordinate
print("locations = \(locValue.latitude) \(locValue.longitude)")
}
}
【问题讨论】:
-
问题出在你声明 locationManager 的地方。您需要将其声明为视图控制器的属性
-
顺便说一句,这不是您的实际代码。 locationManager 在哪里声明?您的代码无法按原样编译
-
你的问题是
let locationManager = CLLocationManager()在方法内部创建了一个新的局部变量 locationManager,一旦 viewDidLoad 方法完成,它就会不存在 -
如果您已经在导入 MapKit,则无需导入 CoreLocation
标签: ios swift core-location cllocationmanager