我正在尝试获取用户的位置。为此,我已在info.plist中设置了以下属性:
我还在我的viewDidLoad方法和下面的函数中添加了以下代码。问题是,
![enter image description here](https://istack.dev59.com/j7X8s.webp)
locationManager(manager, didUpdate....)
函数从未被调用过,我也从未被提示允许访问位置,即使我已经删除并重新安装了应用程序。我是在iPad上测试这个应用程序,而不是在模拟器上。didFailWithError函数也从未被调用过。 self.locationManager.delegate = self
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
self.locationManager.requestWhenInUseAuthorization()
self.locationManager.startUpdatingLocation()
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
print("UPDATING")
let locValue:CLLocationCoordinate2D = manager.location!.coordinate
let latitude = locValue.latitude
let longitude = locValue.longitude
latitudeText = "\(latitude)"
longitudeText = "\(longitude)"
if let a = latitudeText, b = longitudeText {
print(a)
print(b)
self.locationManager.stopUpdatingLocation()
if (userAlreadyExist()) {
dispatch_async(dispatch_get_main_queue(), {
//self.performSegueWithIdentifier("segueWhenLoggedIn", sender: self)
self.performSegueWithIdentifier("showCamera", sender: self)
// self.performSegueWithIdentifier("showTabBarController", sender: self)
})
}
else {
dispatch_async(dispatch_get_main_queue(), {
self.performSegueWithIdentifier("segueWhenLoggedOut", sender: self)
})
}
}
}
func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
print(error.localizedDescription)
}
编辑:
我已经添加了以下代码片段:
if CLLocationManager.locationServicesEnabled() {
print("yes")
}
else {
print("no")
}
它返回了“是”。我还在我的设备上进行了检查,位置服务已启用,应用程序已列出,但是所有其他应用程序旁边都写有“仅在使用时”、“从不”或“始终”,而我的应用程序没有任何内容。
requestWhenInUseAuthorization
是否真正执行(例如在viewDidLoad
中),并且在主线程上运行。另一件事是,您应该使用像didChangeAuthorizationStatus
这样的委托来运行startUpdatingLocation
,因为requestWhenInUseAuthorization
是异步的。 - MirekE