2015-05-11 4 views
0

Я работаю над приложением в Swift, которое должно получить GPS-координаты пользователя. Я добавил ключи (NSLocationWhenInUseUsageDescription и NSLocationAlwaysUsageDescription) в info.plist так:CLLocationManager не запрашивает разрешения пользователя

<key>NSLocationWhenInUseUsageDescription</key> 
<string>Location is required to find your coordinates</string> 
<key>NSLocationAlwaysUsageDescription</key> 
<string>Location is required to find your coordinates</string> 

Я также добавил CoreLocation.framework и просил разрешить в методе viewDidLoad:

override func viewDidLoad() { 
    super.viewDidLoad() 

    var locManager = CLLocationManager() 

    locManager.requestWhenInUseAuthorization() 

    locManager.startUpdatingLocation() 

    if(CLLocationManager.authorizationStatus() == CLAuthorizationStatus.AuthorizedWhenInUse){ 

      var currentLocation = locManager.location 
      longitude = currentLocation.coordinate.longitude 
      latitude = currentLocation.coordinate.latitude 
      textBox.text = longitude.description + latitude.description 

    } 
} 

Проблема заключается в том , как говорится в заголовке, что пользователю не предлагается разрешение, поэтому местоположение никогда не обновляется.

+1

Добро пожаловать в SO. Вы уже пробовали следовать инструкциям Apple в письме? В разделе «Запрос разрешения на использование служб местоположения» в [ссылка на класс] (https://developer.apple.com/library/ios/documentation/CoreLocation/Reference/CLLocationManager_Class/index.html) есть другой поток к тому, что вы вы использовали, в частности, чтобы проверить статус, прежде чем запрашивать авторизацию, и вы должны установить делегат. Можете не исправить вашу проблему, но сначала стоит попытаться сделать это, если вы еще этого не сделали. –

+0

Попробуйте это в viewDidAppear -: locManager = CLLocationManager() locManager.delegate = само locManager.desiredAccuracy = kCLLocationAccuracyKilometer locManager.requestAlwaysAuthorization() – Amit89

ответ

0

Сначала добавьте эту строку

locManager.delegate = Я;

override func viewDidLoad() { 
super.viewDidLoad() 

locManager.delegate = self; 
locManager.requestWhenInUseAuthorization() 

locManager.startUpdatingLocation() 

if(CLLocationManager.authorizationStatus() == CLAuthorizationStatus.AuthorizedWhenInUse){ 

     var currentLocation = locManager.location 
     longitude = currentLocation.coordinate.longitude 
     latitude = currentLocation.coordinate.latitude 
     textBox.text = longitude.description + latitude.description 

} 

, чем в классе добавить CLLocationManagerDelegate пример

class ViewController: UIViewController, CLLocationManagerDelegate 

наконец изменить сферу

var locManager = CLLocationManager() 

, например

class ViewController: UIViewController ,CLLocationManagerDelegate{ 
    var locManager = CLLocationManager() 
    override func viewDidLoad() { 
    ... 
+0

Это решило его! Спасибо огромное! – Gundlev

0

Поместите свой locMa nager как свойство ViewController, а не как локальная переменная.

class YourViewController { 
    var locManager: CLLocationManager! 

    override func viewDidLoad() { 

     locManager = CLLocationManager() 
     locManager.requestWhenInUseAuthorization() 
     locManager.startUpdatingLocation() 
     ... 
    } 
} 
Смежные вопросы