2016-03-27 12 views
8

Ich verwende XCode v7.2.1, Simulator v9.2.Mein einfaches Kartenprojekt wird nicht angezeigt und zeigt meinen Standort im Simulator

Ich habe eine UIViewController, die eine Karte zeigt & soll meine Lage & zeigen sie auf der Karte bekommen:

import UIKit 
import MapKit 

class LocationVC: UIViewController, MKMapViewDelegate { 
    @IBOutlet weak var map: MKMapView! 

    let locationManager = CLLocationManager() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     map.delegate = self 
    } 

    override func viewDidAppear(animated: Bool) { 
     if CLLocationManager.authorizationStatus() == .AuthorizedWhenInUse { 
      map.showsUserLocation = true 
     } else { 
      locationManager.requestWhenInUseAuthorization() 
     } 
    } 

} 

Ich habe die NSLocationWhenInUseUsageDescription in info.plist hinzugefügt, wie unten dargestellt:

enter image description here

Ich habe auch die Debug -> Location -> Custom Location ... und geben Sie die Länge & Breite von Helsinki, Finnland, wie unten gezeigt: enter image description here

Wenn ich meine app ausführen, wird die Karte angezeigt, aber es nicht meine Lage bekommen. Warum? (Ich meine, ich sehe den blauen Punkt nirgendwo auf der Karte).

===== ==== UPDATE

Ich habe auch versucht wenn meine app läuft, aber funktioniert es auch nicht helfen.

+0

hinzufügen sollten Sie setzen 'showsUserLocation = true' sowieso nicht Bedingung – Azat

+0

Ich möchte dann zeigen erste Benutzer um Erlaubnis fragen Ort. Jedenfalls ist mit meinem bedingten Code auch nichts falsch. –

+0

Betrachten Sie die folgende Situation: Benutzer öffnet Controller, stimmen zu, Ort zu verwenden, Sie führen 'requestWhenInUseAuthorization()', aber danach passiert nichts mehr, gibt es keinen Code mehr, um den Standort auf der Karte anzuzeigen, so dass Benutzer den blauen Punkt nur beim nächsten Öffnen sehen wird Controller – Azat

Antwort

7

Sie den Standort des Benutzers anfordern, aber nichts mit der Antwort tatsächlich tun. Werden Sie Delegierter des Standortmanagers und reagieren Sie auf die Autorisierungsänderung.

dieser Code funktioniert für mich auf 7.2.1 (nach "Apple" in Debug Auswahl -> Ort):

import UIKit 
import MapKit 

class ViewController: UIViewController, CLLocationManagerDelegate { 
    @IBOutlet weak var map: MKMapView! 

    let locationManager = CLLocationManager() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     locationManager.delegate = self 
    } 

    override func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(animated) 

     if CLLocationManager.authorizationStatus() == .AuthorizedWhenInUse { 
      map.showsUserLocation = true 
     } else { 
      locationManager.requestWhenInUseAuthorization() 
     } 
    } 

    func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) { 
     guard status == .AuthorizedWhenInUse else { print("not enabled"); return } 
     map.showsUserLocation = true 
    } 
} 
0

ich mit @Casey ‚s Antwort einverstanden, aber manchmal müssen Sie ein wenig tun mehr mit CLLocationManagerDelegate Methode.

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    if let location = locations.first { 
     //reset mapView's center in case your custom location was wrong. 
     map.centerCoordinate = location.coordinate 
     //mannual call show annotations to avoid some bugs 
     map.showAnnotations(map.annotations, animated: true) 
    } 
} 
0

Sie müssen nur

locationManager.delegate = self 
mapView.showsUserLocation = true