2016-04-15 4 views
0

CLLocationManagerを使用してユーザーの現在の緯度/経度を取得するボタンがあり、緯度/経度の両方を新しいビューコントローラーに渡そうとしています。緯度/経度の取得は機能しますが、新しいビューコントローラにデータを渡そうとすると、渡されません。ユーザーの緯度と経度が新しいビューコントローラーに渡されない

ヘルプがありますか?


編集:

func getCurrentLocation() { 
    locationManager.delegate = self 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest 
    locationManager.requestLocation() 
} 

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    if let location = locations.first { 
     self.userLongtitude = location.coordinate.longitude 
     self.userLatitude = location.coordinate.latitude 

     self.performSegueWithIdentifier("useCurrentLocation", sender: nil) 
    } 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    let destinationVC = segue.destinationViewController as! ListOfEventsTableViewController 
    if segue.identifier == "useCurrentLocation" {    
     destinationVC.userCurrentLat = self.userLatitude 
     destinationVC.userCurrentLong = self.userLongtitude 
    } 
} 

答えて

0

理由は、ユーザーの位置を得ることが非同期であるということです。つまり、場所が利用可能なときに新しいビューコントローラをプッシュする必要があります(たとえば、didUpdateLocations)。またはユーザーの場所を早く取得しようとします。

0

CLLocationManagerクラスのlocationManager.startUpdatingLocation()は即時ではありません。だから、あなたはそれが設定されている方法は、あなたがロケーションマネージャを起こし、それを呼び出す。これはCLLocationManager

にAppleの文書から取られgetCurrentLocation()

を呼び出すとき、それはすぐに緯度と経度の値を保存するために期待していますロケーションフィックスを取得し(数秒かかる場合があります)、デリゲートのlocationManager:didUpdateLocations:メソッドを呼び出して結果を呼び出します。

私は、我々は緯度と経度が設定されていることを知っているdidUpdateLocationsメソッド内performSegueWithIdentifierを置くことをお勧めします。また、アプリの特定のポイントで緯度と経度のみが必要な場合は、CLLocationManagerrequestLocationメソッドを使用して、地図アプリのようなものに必要な場所を常に取得するのではなく、場所を一度更新する方法をお勧めします。

関連する問題