2016-07-14 23 views
-1

Ich versuche, den Standort des Nutzers zum Zeitpunkt der Tastendruck zu bekommen, aber Ich habe Probleme, den Standortcode einrichten. Ich habe zwischen verschiedenen Antworten auf Stackoverflow gesucht, aber ich kann nichts für mich arbeiten.Mühe, eine einmalige Benutzer-Standort in Swift

class MyViewController: UIViewController, CLLocationManagerDelegate { 

var locationManager = CLLocationManager() 

override func viewDidLoad() { 
    super.viewDidLoad() 

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

} 

func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) { 
    if status == .AuthorizedAlways || status == .AuthorizedWhenInUse { 
     let latitude = self.locationManager.location?.coordinate.latitude 
     let longitude = self.locationManager.location?.coordinate.longitude 
     print("coordinates:") 
     print(latitude) 
     print(longitude) 
    } 
} 

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    let locationValue : CLLocationCoordinate2D = manager.location!.coordinate 
    print("locations = \(locationValue.latitude) \(locationValue.longitude)") 
} 

Allerdings bekomme ich nur nils aus den Abzügen in didChangeAuthorizationStatus und nichts jemals druckt aus didUpdateLocations. Ich bin auch wirklich verwirrt darüber, wo man startUpdatingLocation() setzen. Einige Antworten legen Sie es direkt in viewDidLoad wie ich hier habe, andere legen Sie es in didChangeAuthorizationStatus, und ich sah einen anderen Ort, um es im Inneren eines if CLLocationManager.locationServicesEnabled() in didLoad. Was ist der richtige Weg, dies zu tun? Und was habe ich falsch gemacht, dass ich keine Werte drucken kann? Ich verwende den Emulator, lasse den Standort aktivieren und erlaube Berechtigungen im Popup-Fenster und lasse den Emulator auf einen benutzerdefinierten Ort (lat/long) setzen, und ich habe die Werte in pList hinzugefügt.

edit: even tried copy/pasting the code from this to get user's location only once aber es gibt (kCLErrorDomain error 0.). Ich habe einen 'requestWhenInUseAuthorization() `zu ihrem Code hinzugefügt, aber es schlägt immer noch fehl.

Antwort

0

get nils aus den Abzügen in didChangeAuthorizationStatus

Weil wir alle Standorte noch nicht haben. Das ist der falsche Ort, um nach diesen Informationen zu fragen. Alles was passiert ist, ist, dass wir jetzt autorisiert sind.

nichts jemals druckt von didUpdateLocations

Weil Sie auf dem Simulator laufen lassen, vielleicht. Versuchen Sie, auf einem Gerät zu laufen.

Und wenn Ihr Ziel ist, nur um den Ort zu erhalten und zu stoppen, nicht startUpdatingLocation nicht verwenden; Anruf requestLocation. Dafür ist es da.

+0

Würde es Ihnen helfen, Code zu sehen, der funktioniert? https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch22p773location/ch35p1032location/ViewController.swift – matt

+0

wie für 'requestLocation', addierten gerade in meinem bearbeiten, aber ich versuchte dies und es immer noch kommt als Misserfolg auf. https://www.hackingwithswift.com/example-code/location/how-to-request-a-users-location-only-once-using-requestlocation Ich habe im Emulator eine Stelle gesetzt, sollte diese Arbeit nicht? Ich werde versuchen, mein iPhone zu verbinden, obwohl und wenn es anders ist –

+0

Cool, lass es mich wissen, wenn das hilft. – matt