#swift #xcode
#swift #xcode
Вопрос:
В настоящее время я играю со службами определения местоположения на iPhone и создал контроллер просмотра с помощью одной кнопки.
Я создал выход действия для кнопки, при нажатии на которую я хочу запросить местоположение пользователя.
@IBAction func requestLocation(_ sender: AnyObject) {
self.locationManager.delegate = self
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
self.locationManager.requestWhenInUseAuthorization()
self.locationManager.startUpdatingLocation()
checkLocation()
}
Я также вызвал свою функцию checkLocation(), которая проверяет статус авторизации для этого, но она вызывается до того, как пользователь получит возможность разрешить или запретить запрос.
func checkLocation() {
if CLLocationManager.locationServicesEnabled() {
switch(CLLocationManager.authorizationStatus()) {
case .notDetermined, .restricted, .denied:
print("No access")
case .authorizedAlways, .authorizedWhenInUse:
print("Access")
}
} else {
print("Location services are not enabled")
}
}
Есть ли способ, которым я могу справиться, когда пользователь нажимает как разрешить, так и запретить.
Комментарии:
1. Если пользователь нажимает «разрешить», а местоположение отключено, тогда перейдите к настройкам конфиденциальности, а если пользователь нажимает «запретить» — ничего не делайте и закройте оповещение
2. Как мне на самом деле реализовать проверки, чтобы увидеть, нажимает ли пользователь разрешить? Извините, в моем вопросе должно быть более ясно.
Ответ №1:
Когда вы добавили NSRequestWhenInUse в свой файл info.plist, системное оповещение будет отображаться при первом открытии приложения. В этом предупреждении есть два варианта «Разрешить» и «Отменить». Поэтому, когда пользователь нажимает разрешить, он переходит в настройки, а когда пользователь включает местоположение, ваше приложение обновит местоположение пользователя. Таким образом, вам не нужно ничего делать вручную.
И добавьте этот метод,
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error?) {
// [manager stopUpdatingLocation];
print("error(error)")
switch error!.code {
case kCLErrorNetwork:
// general, network-related error
var alert = UIAlertView(title: "Location Error!", message: "Can't access your current location! Please check your network connection or that you are not in airplane mode!", delegate: nil, cancelButtonTitle: "Ok", otherButtonTitles: "")
alert.show()
case kCLErrorDenied:
var alert = UIAlertView(title: "Location Error!", message: "Location Access has been denied for app name!", delegate: nil, cancelButtonTitle: "Ok", otherButtonTitles: "")
// alert.tag=500;
alert.show()
default:
var alert = UIAlertView(title: "Location Error!", message: "Can't access your current location!", delegate: nil, cancelButtonTitle: "Ok", otherButtonTitles: "")
Комментарии:
1. Я пытаюсь напечатать что-то в журналах, когда пользователь нажимает не разрешать
2.
Value of type 'Error' has no member 'code'
у вас есть обновленный код?