Почему 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
В настоящее время в iOS8 beta5 есть ошибка, которая всегда отключает службу геолокации для вашего приложения (по крайней мере, для моего).
Зайдите в настройки> Конфиденциальность> Службы определения местоположения> Ваше приложение> Всегда.
Но я не знаю почему, но даже если вы установите для него значение "Всегда", этот параметр будет автоматически отключаться, поэтому проявите терпение и почаще возвращайтесь в настройки, чтобы снова настроить местоположение вашего приложения.
Ответ 3 · Rahul Mayani
Это проблема, связанная с iOS 8. Вы должны поместить ключи NSLocationAlwaysUsageDescription или NSLocationWhenInUseUsageDescription в ваш файл .plist (значение может быть дополнительным сообщением, которое будет представлено в предупреждении о местоположении). Эти ключи требуются в iOS 8.
Как сказано в рекомендациях Apple:
В итоге я решил свою проблему.
Очевидно, в iOS 8 SDK перед запуском обновления местоположения требуется вызов requestAlwaysAuthorization (для фонового местоположения) или requestWhenInUseAuthorization (местоположение только на переднем плане) CLLocationManager.
В Info.plist также должна быть клавиша NSLocationAlwaysUsageDescription или NSLocationWhenInUseUsageDescription с сообщением, которое будет отображаться в приглашении. Их добавление решило мою проблему.
При первом запуске симулятора не инициализируйте местоположение даже при настройке в 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 в своем списке, вы должны использовать следующий код:
В симуляторе не включен GPS. Итак, для базовых вещей мы должны использовать Device. Симулятор всегда будет указывать вам местоположение (0,0) по умолчанию.