Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: TIMEXОтветов: 5
//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" в списке.

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

iosswiftcore-location

Ответы

Ответ 1 · рейтинг 3 · Dharmesh Kheni

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

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

Ответ 2 · Rahul Mayani

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

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

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

Ответ 3 · Rahul Mayani

Это проблема, связанная с 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()

Ответ 4 · Akhi

При первом запуске симулятора не инициализируйте местоположение даже при настройке в 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()

Ответ 5 · рейтинг -2 · SHIV

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы