2017-07-10 7 views
0

latitudelongitudeを取得しようとしていますが、場所は常にnilです。CLLocationManager()場所はシミュレータではゼロです

class FinalizeOrderController: UIViewController { 

    var locManager = CLLocationManager() 
    var currentLocation: CLLocation! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     currentLocation = CLLocation() 
     locManager.requestWhenInUseAuthorization() 

     // Do any additional setup after loading the view. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    @IBAction func FinaliseOrder(_ sender: Any) { 
     if (CLLocationManager.authorizationStatus() == CLAuthorizationStatus.authorizedWhenInUse || 
      CLLocationManager.authorizationStatus() == CLAuthorizationStatus.authorizedAlways) { 
      currentLocation = locManager.location 
      print(locManager.location?.coordinate.latitude) //prints nil 
      print(currentLocation.coordinate.longitude) //fatal error: unexpectedly found nil while unwrapping an Optional value 
     } 


     lbl1.text = "\(currentLocation.coordinate.longitude)" 
     lbl2.text = "\(currentLocation.coordinate.latitude)" 
    } 

は私がのInfo.plistキーを追加し、Xcodeからシミュレータの場所を実行して、デバッグからシミュレータの場所を選択しましたが方法が常にnil

+1

- デバッグ - 場所は –

+0

NULLでない私Appleを選ぶ –

+0

'location'プロパティにアクセスすることはできません。 'didUpdateLocations'デリゲートメソッドへのコールバックを待つ必要があります。 – Paulw11

答えて

1

はこれを試してみてくださいません:

var locationManager: CLLocationManager? 
var currentLocation:CLLocation? 

が委任準拠します

class ViewController: UIViewController,CLLocationManagerDelegate 
ボタンアクションでのviewDidLoadで

override func viewDidLoad() { 

     super.viewDidLoad() 
     locationManager = CLLocationManager(); 
     locationManager.delegate = self; 
     locationManager.desiredAccuracy = kCLLocationAccuracyBest 
     let authorizationStatus = CLLocationManager.authorizationStatus() 

     if (authorizationStatus == CLAuthorizationStatus.NotDetermined) { 
      locationManager.requestWhenInUseAuthorization() 
     } else { 
      locationManager.startUpdatingLocation() 
     } 
    } 

委任

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) { 
    currentLocation = locations[locations.count-1] as CLLocation 

    print("locations = \(currentLocation)") 
    // lbl1.text = "\(currentLocation.coordinate.latitude)"; 
    // lbl2.text = "\(currentLocation.coordinate.longitude)"; 
} 

では、チェック・シミュレータ

@IBAction func FinaliseOrder(_ sender: Any) { 

     lbl1.text = "\(currentLocation.coordinate.longitude)" 
     lbl2.text = "\(currentLocation.coordinate.latitude)" 
} 
関連する問題