iPhone den aktuellen Standort der Benutzer-Koordinaten, die zeigen, wie (0,0)
Ich versuche, die aktuelle Breite und Länge mit dieser viewDidLoad-Methode. Die resultierende Karte ist richtig angibt, die aktuelle Lage aber die NSLog konsequent zeigt:
2009-09-19 16:45:29.765 Mapper[671:207] user latitude = 0.000000
2009-09-19 16:45:29.772 Mapper[671:207] user longitude = 0.000000
Wer weiß, was ich hier vermisst? Vielen Dank im Voraus für Eure Hilfe!
- (void)viewDidLoad {
[super viewDidLoad];
[mapView setMapType:MKMapTypeStandard];
[mapView setZoomEnabled:YES];
[mapView setScrollEnabled:YES];
[mapView setShowsUserLocation:YES];
CLLocation *userLoc = mapView.userLocation.location;
CLLocationCoordinate2D userCoordinate = userLoc.coordinate;
NSLog(@"user latitude = %f",userCoordinate.latitude);
NSLog(@"user longitude = %f",userCoordinate.longitude);
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wird die Karte nicht versuchen, den Benutzer-Standort, bis es tatsächlich angezeigt, soweit ich weiß. Ein guter test ist, wenn Sie das Fenster in dem Sie gefragt ob es OK ist, für die app zu bekommen die Nutzer die Lage? In meiner Erfahrung, die kommen immer erst nach der Karte zeigt auf dem Bildschirm.
Die beste Herangehensweise an dieses problem, wenn Sie müssen einen Speicherort auf Start, ist die Umsetzung des klassischen Core-Location-handler-code und erhalten Sie den Ort aus, der zunächst. Sie können nicht mehr erhalten updates von dort einmal auf die Karte und Sie erhalten weitere änderungen, die von dort aus (obwohl, wenn Sie benötigen Konstante updates, die Sie besser dran, nur halten mit den standard-Core-Standort-updates. Wenn Sie darüber nachdenken, wenn Sie "shows user location" aktiviert und in der Karte weitere Nutzung von Core Location, die durch Ihre app ist grundsätzlich kostenlos, da das GPS befeuert wird sowieso die ganze Zeit.
Wenn Sie versuchen, um Benutzer-Koordinaten in die viewDidLoad() Methode, wird es immer geben, 0,0 Ergebnis, denn es ist noch nicht initialisiert.
Sollten Sie einen Blick auf "Wo Bin ich" - sample-code-form Apple-Website. Es wird erklärt, was, die Sie brauchen.
Sie benötigen CLLocationManager Klasse. Sie müssen auch die Methode
Diese Methode wird automatisch aufgerufen, jedes mal, wenn der Benutzer die Position aktualisiert wird. Wenn Sie simulator, dann wird diese Methode nur einmal aufgerufen, und es wird wieder einige Standard-Koordinaten.
Hoffe, es hilft.
Aus dem Dokument auf CLLocation, wenn die horizontale Genauigkeit oder vertikale Genauigkeit negativ ist, bedeutet es nicht finden können, ein Wert. Ich vermute, dass das, was hier geschieht. Beachten Sie, dass wenn Sie nur schauen Sie einmal, es kann Ihnen eine Ungefähre letzten bekannten Position, bevor überhaupt die Verbesserung der Genauigkeit resultieren.
Sollten Sie sich die Koordinaten von CoreLocation anstelle von MapKit. MapView zeigt die Position des Benutzers, nachdem es eigentlich immer die aktuelle Lage. Bevor die Position bestimmt wird, die Breite und Länge sind beide auf 0 gesetzt. 3
Sollten Sie eine CLLocationManager instace, stellen delegieren. Sie werden benachrichtigt, wenn der Standort bestimmt ist.
Als Kendall sagte, die MKMapView nicht über einen Benutzer-Standort, bis es fertig geladen ist, und die Kommentarzeichen vor der viewDidLoad-Methode ist in der Regel zu früh, es zu verlangen. Einen einfacheren Weg, als mit CoreLocation, ist die Implementierung der Methode MKMapViewDelegate
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
. Es wird Ihnen den Standort des Benutzers sobald Sie liegt, ohne sich mit einem CLLocationManager.Diese Antwort erklärt, wie eine Kartenansicht mit einem Benutzer-Standort:
HowTo initialisieren MKMapView mit einer bestimmten Benutzer-Standort?
Versuchen, diese in
ViewdidAppear:, oder rufen Sie durchführen seletor nach Verzögerung
Fügen Sie diese zu Ihrem viewDidLoad Abschnitt