2016-06-03 4 views
0

Я пытаюсь получить местоположение пользователя в Swift. Используя приведенный ниже код. Но когда я звонюЯ не могу получить Swift, чтобы указать мне местоположение пользователя

let currentloc = self.locationManager.location? .coordinate, он возвращает значение nil. Код ниже находится выше строки let currentloc в скрипте.

 self.locationManager.delegate = self 
    self.locationManager.requestAlwaysAuthorization() 
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest 
    self.locationManager.requestWhenInUseAuthorization() 
    self.locationManager.startUpdatingLocation() 
+1

Является ли метод делегата? Потому что местоположение не является «немедленным». Вы должны получить его через метод делегата. – Larme

+0

Я не уверен. что такое метод делегата? –

+3

'self.locationManager.delegate': Почему вы положили эту строку? ' - locationManager: didUpdateLocations:' – Larme

ответ

1

Убедитесь, что вы:

  1. import Corelocation + import MapKit в своем классе.
  2. соответствует MKMapViewDelegate и CLLocationManagerDelegate
  3. экземпляра locationmanager: let locationManager = CLLocationManager() в вашем переменном классе
  4. в вашей viewDidLoad попробовать:

    self.locationManager.delegate = self 
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest 
    self.locationManager. requestAlwaysAuthorization() 
    self.locationManager.startUpdatingLocation() 
    self.mapView.showsUserLocation = true 
    
  5. Добавьте следующий метод делегата для печати Вашего местоположения:

    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    print(locations.last!.coordinate) 
    } 
    
+0

Спасибо. Но я думаю, что это проблема с обновлением местоположения пользователя и тем, как он не мгновен. Смотрите, у меня есть цикл, который печатает метки с их расстоянием от пользователя, поэтому я пытаюсь сделать это мгновенно. он не работает –

+0

Вы используете симулятор или реальное устройство? – Hapeki

+0

Симулятор (iPhone 6) –

0

TLDR;

  • продукта -> Схема -> Изменить Схема -> Параметры -> Разрешить Расположение Моделирование необходимо проверить и попытаться обеспечивая местоположение по умолчанию, не оставляйте его установить на «нет»

Когда ты тест на симуляторе, вы должны указать местоположение по умолчанию, пожалуйста, проверьте мой ответ здесь: https://stackoverflow.com/a/32887820/4887400

+0

Спасибо, но означает ли это, что мой код будет работать на устройстве, когда я буду называть 'locationManager.location.coordinates' и иметь свой код, используя местоположение прямо после этого? Или мне пришлось бы называть остальную часть кода делегатом locationManager? –