Почему LocationManager не вызывается в симуляторе iOS, а вызывается по телефону?

//in my viewDidLoad()
    self.locationManager.requestWhenInUseAuthorization()
    self.locationManager.delegate = self
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
    self.locationManager.startUpdatingLocation()
    self.locationManager.startMonitoringSignificantLocationChanges()

    if CLLocationManager.authorizationStatus() == CLAuthorizationStatus.Denied{
        println("location not authorized")
    }


//somewhere down the file

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
    println("Location") //this prints on the phone, not simulator
    self.locationManager.stopUpdatingLocation()
}

У меня также есть "NSLocationWhenInUseUsageDescription" в списке.

введите описание изображения здесь


person TIMEX    schedule 07.04.2015    source источник
comment
Проверьте эту ссылку http://nevan.net/2014/09/core-location-manager-changes-in-ios-8/. Может быть полезно   -  person Gandalf    schedule 07.04.2015
comment
Вероятно, потому что нет обновлений местоположения, это просто одно местоположение, которое не меняется. Попробуйте перейти в Simulator: Debug - Location - и выберите некоторые из 3 последних опций, они генерируют обновления местоположения.   -  person Pablo A.    schedule 07.04.2015


Ответы (5)


Просто сбросьте свой симулятор отсюда:

введите описание изображения здесь

Надеюсь, это поможет.

person Dharmesh Kheni    schedule 07.04.2015

В настоящее время в iOS8 beta5 есть ошибка, которая всегда отключает службу геолокации для вашего приложения (по крайней мере, для моего).

Зайдите в настройки> Конфиденциальность> Службы определения местоположения> Ваше приложение> Всегда.

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

person Rahul Mayani    schedule 07.04.2015

Это проблема, связанная с iOS 8. Вы должны поместить ключи NSLocationAlwaysUsageDescription или NSLocationWhenInUseUsageDescription в ваш файл .plist (значение может быть дополнительным сообщением, которое будет представлено в предупреждении о местоположении). Эти ключи требуются в iOS 8.

Как сказано в рекомендациях Apple:

В итоге я решил свою проблему.

Очевидно, в iOS 8 SDK перед запуском обновления местоположения требуется вызов requestAlwaysAuthorization (для фонового местоположения) или requestWhenInUseAuthorization (местоположение только на переднем плане) CLLocationManager.

В Info.plist также должна быть клавиша NSLocationAlwaysUsageDescription или NSLocationWhenInUseUsageDescription с сообщением, которое будет отображаться в приглашении. Их добавление решило мою проблему.

self.locationManager.delegate = self
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
self.locationManager.startUpdatingLocation()
self.locationManager.startMonitoringSignificantLocationChanges()
self.locationManager.requestWhenInUseAuthorization()
person Rahul Mayani    schedule 07.04.2015

При первом запуске симулятора не инициализируйте местоположение даже при настройке в Debug-> Location-> Custom Location из ios8. Поэтому вам нужно сначала выбрать вариант none из debug-> Location-> None, как показано ниже

[![enter image description here][1]][1]
[1]: http://i.stack.imgur.com/WAl14.png

and then next you should following

[![enter image description here][2]][2]

  [2]: http://i.stack.imgur.com/oCtfB.png

теперь, наконец, вы должны снова запустить свое приложение на симуляторе и, используя ключ NSLocationWhenInUseUsageDescription в своем списке, вы должны использовать следующий код:

locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()
person Akhi    schedule 12.05.2016

В симуляторе не включен GPS. Итак, для базовых вещей мы должны использовать Device. Симулятор всегда будет указывать вам местоположение (0,0) по умолчанию.

person SHIV    schedule 12.05.2016