2016-04-20 17 views
1

info.plist Datei:derzeit keine Orte, um zu sehen: [CLLocation]

<key>NSLocationWhenInUseUsageDescription</key> 
<string>This project would like to know your location</string> 

<key>NSLocationAlwaysUsageDescription</key> 
<string>location when app is in background</string> 

Wie oben gezeigt, hat die Schlüssel/Wert-Paare für die info.plist

hinzugefügt

Das Problem, das ich mit Blick auf bin ist Als ich die App das erste Mal gestartet habe, wurde ich zur Autorisierung aufgefordert, aber bei nachfolgenden Läufen wurde das Popup nicht angezeigt.

Sekunden, ich versuche, die Standorte von
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) mit dem print(location) aber nichts gedruckt zu drucken.

in den Debug-Optionen i Lage als „Stadt Fahrradfahrt“ eingestellt haben

Der Code i bin mit wie folgt.

import UIKit 
import MapKit 
import CoreLocation 

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

//use the locManager to get the users location 

var locManager = CLLocationManager() 

override func viewDidLoad() { 
    locManager.delegate = self 
    locManager.desiredAccuracy = kCLLocationAccuracyBest 
    locManager.requestWhenInUseAuthorization() 
    super.viewDidLoad() 

} 

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    print(locations) 
} 

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


} 
+0

fand ich eine Lösung für den Standort prompt. Ich habe den Simulator zurückgesetzt und es hat funktioniert. Gibt es eine Möglichkeit, es zu beheben, ohne den Simulator zurückzusetzen? Das Problem bleibt bestehen..was ich meine ist, dass, sobald ich es zurückgesetzt habe, es mich einmal und nie wieder bis zum nächsten Reset anfordert. Die Standorte werden jedoch nicht gedruckt ... – baconSoda

+1

Was ist mit dem Aufruf von 'startUpdatingLocation()' ...? –

+0

@MartinR Ja, du hast recht, ich musste 'startUpdatingLocation()' danke :) – baconSoda

Antwort

2

iOS nur einmal für Standort Genehmigung bitten. Verweigert der Nutzer dies, muss er dies in den Geräteeinstellungen manuell ändern. Wenn er zustimmt, können Sie den Standort ermitteln, bis er ihn in den Geräteeinstellungen blockiert.

Also dieser Code:

locManager.requestWhenInUseAuthorization() 

wird ein Popup nur 1mal prompt. Das Problem ist, dass Sie wahrscheinlich zu nennen vergessen:

locManager.startUpdatingLocation() 

Sie müssen dies wollen Sie jedes Mal anrufen, um den Standort beginnen zu erhalten.

+1

danke! das hat funktioniert ... also muss startUpdatingLocation() aufgerufen werden. Derzeit werden die Standorte gedruckt, aber die Karte wird auf Länderebene verkleinert. Ich vermute, dass dies durch die Einführung der Delta-Werte, Span und Region behoben werden kann? 'lassen Spannweite: MKCoordinateSpan = MKCoordinateSpanMake (latDelta, longDelta) Region lassen: MKCoordinateRegion = MKCoordinateRegionMake (Standorte, Span) map.setRegion (Region, animiert: true)' Lassen Sie sich diese noch nicht ausprobiert haben, werden update sobald ich es tue. Vielen Dank !! – baconSoda

-1

Verwendung dieses

override func viewDidLoad() { 
super.viewDidLoad() 
locationManager.delegate = self 
locationManager.requestLocation() 
locationManager.requestWhenInUseAuthorization() 
locationManager.requestAlwaysAuthorization() 
locationManager.desiredAccuracy = kCLLocationAccuracyBest 
locationManager.startUpdatingLocation() 
} 
+0

Warum sollten Sie 'WhenInUseAuthorization' und' AlwaysAuthorization' anfordern? Es sieht aus wie ein Copy-Paste-Code ... – KlimczakM

+0

Verwenden Sie, was Sie verwenden möchten. – niks290192

+0

Aber beides macht keinen Sinn. 'AlwaysAuthorization' deckt bereits (>) 'WhenInUseAuthorization' ab. – KlimczakM