Ich versuche, mit dieser viewDidLoad-Methode den aktuellen Breiten- und Längengrad des Benutzers zu erhalten. Die resultierende Karte zeigt den aktuellen Standort korrekt an, der NSLog zeigt jedoch konsistent:
%Vor%Weiß jemand, was ich hier vermisse? Vielen Dank im Voraus für Ihre Hilfe!
%Vor%Die Karte versucht nicht, den Standort des Benutzers zu erhalten, bis es tatsächlich angezeigt wird, soweit ich weiß. Ein guter Test dafür ist, wann Sie das Dialogfeld erhalten, in dem Sie gefragt werden, ob es für die App in Ordnung ist, den Standort des Benutzers zu ermitteln. Nach meiner Erfahrung ist das immer erst aufgetaucht, nachdem die Karte auf dem Bildschirm erscheint.
Der beste Weg, dieses Problem anzugehen, wenn Sie beim Start eine Position haben müssen, ist die Implementierung des klassischen Core-Position-Handler-Codes und das Abrufen der Position von dieser ursprünglich. Sie können keine Updates mehr von dort erhalten, sobald die Karte geöffnet ist, und weitere Änderungen von dort erhalten. Wenn Sie jedoch ständige Updates benötigen, sollten Sie besser mit den standardmäßigen Core Location Updates fortfahren. Wenn Sie darüber nachdenken, wenn Sie "Benutzer anzeigen Standort "aktiviert in der Karte die weitere Nutzung von Core Location durch Ihre App ist im Prinzip kostenlos, da das GPS sowieso die ganze Zeit hochgefahren wird.
Wenn Sie versuchen, in der viewDidLoad () -Methode Benutzerkoordinaten zu erhalten, wird immer ein Ergebnis von 0,0 ausgegeben, weil es noch nicht initialisiert ist.
Sie sollten einen Blick auf "Where Am I" Beispielcode Apple Website werfen. Es erklärt, was Sie brauchen. Sie müssen die CLLocationManager -Klasse verwenden. Sie benötigen auch die Methode
%Vor%Diese Methode wird jedes Mal automatisch aufgerufen, wenn der Benutzerstandort aktualisiert wird. Wenn Sie den Simulator verwenden, wird diese Methode nur einmal aufgerufen und gibt einige Standardkoordinaten zurück.
Ich hoffe, es hilft.
Aus dem Dokument CLLocation , wenn die horizontale Genauigkeit oder vertikale Genauigkeit negativ ist, bedeutet dies, dass sie keinen Wert finden kann. Ich vermute, dass das hier passiert. Denken Sie daran, dass, wenn Sie nur einmal schauen, es Ihnen einen ungefähren letzten bekannten Standort geben kann, bevor Sie jemals das Genauigkeitsergebnis verbessern.
Horizontale Genauigkeit Der Breitengrad der Koordinate und Länge identifizieren das Zentrum der Kreis und dieser Wert zeigt an Radius dieses Kreises. Ein Negativ Wert gibt an, dass die Koordinate ist Länge und Breite sind ungültig.
Sie sollten die Koordinaten von CoreLocation anstelle von MapKit erhalten. MapView zeigt den Standort des Benutzers an, nachdem er den aktuellen Standort erreicht hat. Bevor der Standort bestimmt wird, werden die Längen- und Breitengrade beide auf 0 gesetzt. 3
Sie sollten eine CLLocationManager-Instanz erstellen und den Delegaten festlegen. Sie werden benachrichtigt, wenn der Standort ermittelt wurde.
Wie Kendall sagte, hat MKMapView keinen Benutzerstandort, bis das Laden beendet ist Die viewDidLoad-Methode ist normalerweise zu früh, um sie anzufordern. Ein einfacherer Weg als die Verwendung von CoreLocation ist die Implementierung der MKMapViewDelegate-Methode %Code%. Sie erhalten den Standort des Benutzers, sobald er sich befindet, ohne sich mit einem CLLocationManager befassen zu müssen.
In dieser Antwort wird erläutert, wie eine Kartenansicht mit einem Benutzerstandort festgelegt wird:
Wie initiiere ich MKMapView mit einem bestimmten Benutzerstandort?
Tags und Links iphone coordinates mapkit