2016-08-23 3 views
0

Это мой общий класс ViewController, я исследую этот вопрос iOS app doesn't ask for location permission, у меня уже есть NSLocationAlwaysUsageDescription и NSLocationWhenInUseUsageDescriptionIOS App Местоположение Разрешение не работает В настоящее время

@IBOutlet weak var ownMapView: MKMapView! 

let locationManager : CLLocationManager = CLLocationManager(); 


override func viewDidLoad() { 
    super.viewDidLoad(); 

    self.locationManager.delegate = self; 
    self.locationManager.requestWhenInUseAuthorization(); 
    self.locationManager.startUpdatingLocation(); 
} 

func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) { 
    guard status == .AuthorizedWhenInUse else 
    { 
     print("Location not using"); 
     return; 
    } 

    print("Location using."); 
    ownMapView.showsUserLocation = true; 
    } 

Даже я добавил NSLocationAlwaysUsageDescription и NSLocationWhenInUseUsageDescription это не работает для меня , Он печатает только «Место не используется»

Как я могу запросить правильно?

+0

При первом запуске статус должен быть «NotDetermined», и вы должны получить разрешение всплывающих окон. Вы получили это всплывающее окно? – firstinq

+0

В первой попытке я выбираю параметр «Не разрешать», затем программа никогда не запрашивает запрос разрешения местоположения. – elia

+0

Я имею в виду первый запуск приложения – elia

ответ

0

Чтобы понять это правильно проверить CLLAuthorizationStatus документ: https://developer.apple.com/library/ios/documentation/CoreLocation/Reference/CLLocationManager_Class/#//apple_ref/c/tdef/CLAuthorizationStatus

CLAuthorizationStatus имеет несколько возможных значений:

  • NotDetermined - Пользователь пока не было принято решение разрешить/запретить использовать данные о местоположении
  • Restricted - Приложение ограничено только для использования.
  • Отказано - Пользователь отказал в использовании.
  • AuthorizedAlways - это приложение имеет право запускать службы определения местоположения в любое время.
  • AuthorizedWhenInUse - App имеет право запустить большинство услуг определения местоположения во время работы на переднем плане

Вы проверяете только статус «AuthorizedWhenInUse», но вы запускаете первый его статус NotDetermined.

Вы можете дополнительно проверить состояние, как показано ниже:

func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) { 

     if status == .NotDetermined 
     { 
      print ("Loction use not determined") 
      return 
     } 
     if status == .Denied 
     { 
      print ("Location determined") 
      return 
     } 
     guard status == .AuthorizedWhenInUse else 
     { 
      print("Location not using"); 
      return; 
     } 

     print("Location using."); 
     ownMapView.showsUserLocation = true; 
    } 
0

enter image description here У нас есть NSLocationAlwaysUsageDescription & NSLocationWhenInUseUsageDescription in plist? , Добавьте их, и это сработает.

+0

«У меня уже есть NSLocationAlwaysUsageDescription и NSLocationWhenInUseUsageDescription» - он уже сделал это – firstinq

+0

Да, сэр, я добавил эти два описания – elia

+0

Проблема решается путем переустановки программы – elia