2014-09-29 7 views
2

Это мой код:Получение местоположения пользователя в быстрой

import Foundation 
import CoreLocation 

class ViewController: UIViewController, CLLocationManagerDelegate { 

let locationManager = CLLocationManager() 

@IBOutlet weak var locationLabel: UILabel! 

var coord: CLLocationCoordinate2D? 

override func viewDidLoad() { 
    super.viewDidLoad() 
    locationManager.delegate = self 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest 
    locationManager.requestWhenInUseAuthorization() 
    if CLLocationManager.authorizationStatus() == CLAuthorizationStatus.Authorized { 
     locationManager.startUpdatingLocation() 
     println(coord!.longitude) 
     locationLabel.text = "location found" 
    } 

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

    } 


    } 
} 

Этот код не возвращает ничего (он должен напечатать долготу). Который кажется O.K, потому что если я перееду

  locationManager.startUpdatingLocation() 
     println(coord!.longitude) 

из, если заявления, Xcode генерирует ошибку времени выполнения и говорит, что неожиданно было обнаружено, в то время как ноль разворачивания необязательного значения. Однако я не понимаю, почему? Системы спрашивают у меня разрешение использовать мое местоположение в порядке.

Спасибо!

ответ

3
override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    locationManager = CLLocationManager() 
    locationManager.delegate = self 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest 
    locationManager.requestAlwaysAuthorization() 
    locationManager.startUpdatingLocation() 
} 

func locationManager(manager:CLLocationManager, didUpdateLocations locations:AnyObject[] { 
    println("locations = \(locations)") 
    gpsResult.text = "success" 
} 
0

Вы работаете на iOS8? Предполагая, что так:

1.You необходимо инициализировать self.locationManager = CLLocationManager()

2.Right после, вызовите self.locationManager.requestAlwaysAuthorization(); (до self.locationManager.delegate = self)

3.Add эти ключи к info.plist, используя внешний текстовый редактор (изменить тексты соответственно)

<key>NSLocationWhenInUseUsageDescription</key> 
<string>This is needed for iOS8 and up (when in use)</string> 

<key>NSLocationAlwaysUsageDescription</key> 
<string>This is needed for iOS8 and up (always)</string> 

4.The место, где вы называете println(coord!.longitude) может быть слишком рано. Переместите его в функцию locationManager.

Затем оно должно отображать предупреждение, запрашивающее разрешение на использование служб определения местоположения.

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