2016-07-14 8 views
-2

viewDidLoadメソッドで現在の緯度と経度の値を参照するにはどうすればよいですか?ViewDidLoadでlong latのユーザ

私は以下を使用して試してみた

、しかし...

let locationManager = CLLocationManager() 

    override func viewDidLoad()  
{ 
     super.viewDidLoad() 

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

     self.mapView.showsUserLocation = true 
     mapView.delegate = self 
     let locationLong = locationManager.location!.coordinate.longitude 
     ... 

私はlocationManagerは、コードの実行前に値を取得するチャンスがあったし、それはメッセージで失敗とは思わない:

+0

クラスを使用する方法がわからない場合は、なぜあなたはそれがドキュメントだ読んでいませんか? – Desdenova

+0

ユーザーの所在地を取得するには数秒かかるので、メインスレッドの値にアクセスしようとするとnilになります。 –

+0

CLLocationManagerデリゲートメソッドを使用して座標を取得する必要があります。 Docを読んでください。 – iphonic

答えて

0

下記のコードを試してください。これがあなたのために働くことを願っています。おかげ

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() 

    self.mapView.showsUserLocation = true 
    mapView.delegate = self 
} 

// CLLocationManager Delegate Method 
func locationManager(manager:CLLocationManager, didUpdateLocations locations:AnyObject[]) { 
     //Use manager for latitude and longitude 
} 
+0

返事をありがとう。私たちは、viewDidLoadメソッドの緯度と経度の値にアクセスしようとしています。それは最適な方法ではないように思えますが、アプリが開くとすぐにユーザーの指示をどのように表示するかわかりません。 –

1

は、私がここに探していた答えを見つけました:

Nil when obtain coordinates in swift

As a general rule, you should not expect a valid CLLocation object for the location property unless location services were started and location updates have already started to come in (e.g. you've seen didUpdateLocations called). The process of determining location happens asynchronously and is not to be expected to be available in viewDidLoad. One should put location-specific logic inside the didUpdateLocations method.

関連する問題