2016-03-27 40 views
8

Sto usando XCode v7.2.1, Simulator v9.2.Il mio semplice progetto di mappa non ottiene e mostra la mia posizione nel simulatore

Ho un UIViewController, che mostra una mappa & dovrebbe ottenere la mia posizione & vederlo sulla mappa:

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

} 

ho aggiunto il NSLocationWhenInUseUsageDescription in info.plist come illustrato di seguito:

Ho anche selezionato il Debug -> Posizione -> Posizione personalizzata ... e impostare la longitudine & latitudine di Helsinki, Finlandia come illustrato di seguito: enter image description here

Quando eseguo la mia applicazione, la mappa viene mostrata, tuttavia non ottiene la mia posizione. Perché? (Voglio dire, non vedo il punto blu in nessuna parte della mappa).

===== ==== UPDATE

Ho anche provato quando la mia applicazione è in esecuzione, ma non aiuta neanche.

+0

È necessario impostare 'showsUserLocation = true' in ogni caso, non dalla condizione – Azat

+0

voglio chiedere il permesso dell'utente prima poi mostrare posizione. Comunque, non c'è niente di sbagliato nel mio codice condizionale. –

+0

Considera la seguente situazione: l'utente apre il controller, accetta di utilizzare la posizione, esegue 'requestWhenInUseAuthorization()' ma dopo non succede nulla, non c'è più codice per mostrare la posizione sulla mappa così l'utente vedrà il punto blu solo la prossima volta che apre questo controller – Azat

risposta

7

si sta richiedendo la posizione dell'utente, ma in realtà non sta facendo nulla con la risposta. diventare il delegato del responsabile della localizzazione e rispondere alla modifica dell'autorizzazione.

Questo codice funziona per me su 7.2.1 (dopo aver selezionato "Apple" in Debug -> Località):

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

Sono d'accordo con la risposta @Casey s', ma a volte è necessario fare un po' più con il metodo CLLocationManagerDelegate.

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

devi solo aggiungere

locationManager.delegate = self 
mapView.showsUserLocation = true