2016-05-11 4 views
1

Я пытаюсь получить длинные и широту моих мест пользователей, я сделал следующее:Swift - Попытка получить текущее местоположение

импортирован Core Location

import CoreLocation 

Добавить Core Location делегата

class ViewController: UIViewController, CLLocationManagerDelegate, AVCaptureMetadataOutputObjectsDelegate, DTDeviceDelegate { 

определена переменная:

var locationManager: CLLocationManager! 

, а затем добавил этот метод:

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
     let userLocation:CLLocation = locations[0] 
     let long = userLocation.coordinate.longitude; 
     let lat = userLocation.coordinate.latitude; 

     print(long, lat) 

     //Do What ever you want with it 
    } 

но место не получает распечатано, мой метод не даже получить его.

Я добавляю элементы, чтобы использовать Core Location на моем plist, и приложение попросит меня использовать службы определения местоположения при первом запуске. Но теперь местоположение печатается ... что я делаю неправильно?

+1

ответа здесь настроек уже: - Http: // stackoverflow.com/questions/25296691/swift-get-users-current-location-coordinates –

ответ

3

Может быть, вы забыли установить значение для delegate

в вашем viewDidLoad() добавить следующее:

if CLLocationManager.locationServicesEnabled() { 
    locationManager.requestAlwaysAuthorization() 
    locationManager.requestWhenInUseAuthorization() 
    locationManager.delegate = self 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest 
    locationManager.startUpdatingLocation() 
    mapView.showsUserLocation = true 
} 
0

Вы нужду инициализировать locationManageger и включить флаг местоположения в Xcode также, это appaear Дно Xcode

self.locationManager = CLLocationManager() 
self.locationManager.delegate = self 
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest 

if #available(iOS 8.0, *) { 

    if Bundle.main.infoDictionary?["NSLocationAlwaysUsageDescription"] != nil { 

     self.locationManager.requestAlwaysAuthorization() 
    } 
    else { 

     self.locationManager.requestWhenInUseAuthorization() 
    }  
} 

self.locationManager.desiredAccuracy = kCLLocationAccuracyBest 
self.locationManager.startUpdatingLocation() 
2

Используйте этот код,

объявлять locationManager

var locationManager = CLLocationManager() 

Установите делегат в viewDidLoad, показанный ниже код,

override func viewDidLoad() { 

    super.viewDidLoad() 

    locationManager.delegate = self 

    if CLLocationManager.authorizationStatus() == .NotDetermined { 
     self. locationManager.requestWhenInUseAuthorization() 
    } 

    locationManager.distanceFilter = kCLDistanceFilterNone 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest 
    locationManager.startUpdatingLocation() 
} 
1

Добавить это в viewdidload,

if (CLLocationManager.locationServicesEnabled()) 
{ 
    locationManager.delegate = self 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest 
    if ((UIDevice.currentDevice().systemVersion as NSString).floatValue >= 8) 
    { 
      locationManager.requestWhenInUseAuthorization() 
    } 

    locationManager.startUpdatingLocation() 
} 
else 
{ 
    #if debug 
    println("Location services are not enabled"); 
    #endif   
} 

Затем добавьте этот метод два делегата, чтобы получить расположение,

func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) 
{ 
    locationManager.stopUpdatingLocation() 
    if ((error) != nil) 
    { 
     print(error) 
    } 
} 

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) 
{ 
    var locationArray = locations as NSArray 
    var locationObj = locationArray.lastObject as! CLLocation 
    var coord = locationObj.coordinate 
    print(coord.latitude) 
    print(coord.longitude) 

} 

Таким образом, вы получите свое текущее местоположение.

0

Вы можете добавить этот код в ваш метод viewDidLoad():

locationManager = CLLocationManager() 
locationManager.delegate = self 
locationManager.desiredAccuracy = kCLLocationAccuracyBest 
locationManager.requestWhenInUseAuthorization() 
locationManager.startUpdatingLocation() 

Это будет вызывать locationManagers didUpdate делегат методы, если услуги определения местоположения доступны для вашего приложения

Смежные вопросы