iPhone aktuelle Benutzerortskoordinaten zeigen, wie (0,0)

stimmen
8

Ich versuche, die Benutzer aktuelle geografische Breite und Länge mit diesem viewDidLoad Verfahren zu erhalten. Die resultierende Karte anzeigt, korrekt die aktuelle Position jedoch 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 fehlt? Vielen Dank im Voraus für Ihre 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);
}
Veröffentlicht am 19/09/2009 um 21:50
quelle vom benutzer
In anderen Sprachen...                            


8 antworten

stimmen
9

Die Karte wird nicht versuchen, den Benutzer Standort zu erhalten, bis sie tatsächlich angezeigt ist, soweit ich weiß. Ein guter Test für das heißt, wenn erhalten Sie den Dialog gefragt, ob es in Ordnung ist für die App die Nutzer Lage zu bekommen? Nach meiner Erfahrung, die immer kommen erst, nachdem die Karte auf dem Bildschirm zeigt.

Der beste Weg, um dieses Problem zu nähern, wenn Sie einen Standort beim Start haben muss, ist den klassischen Core-Location-Handler-Code zu implementieren und den Standort aus, dass zunächst erhalten. Sie können empfangen Updates von dort zu stoppen, sobald die Karte oben ist und weitere Änderungen kommen von dort (obwohl, wenn Sie regelmäßige Updates müssen Sie besser dran, nur mit dem Standard-Core-Location Updates zu halten. Wenn man darüber nachdenkt, wenn Sie „haben zeigen Benutzer Standort“in der weiteren Nutzung von Kern Lage von Ihrer App Karte aktiviert ist im wesentlichen frei, da das GPS die ganze Zeit sowieso gefeuert wird.

Beantwortet am 20/09/2009 um 03:05
quelle vom benutzer

stimmen
4

Wenn Sie versuchen, Benutzer-Koordinaten in viewDidLoad () -Methode zu bekommen, wird es immer 0,0 Ergebnis geben, weil es noch nicht initialisiert ist.

Sie sollten einen Blick auf „Wo bin ich“ Beispielcode Form Apple - Website. Es wird erläutert , was Sie brauchen. Sie müssen verwenden CLLocationManager Klasse. Sie müssen auch die Methode

*-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation*

Diese Methode wird automatisch jedes Mal, wenn der Benutzer Ort genannt wird aktualisiert. Wenn Sie Simulator verwenden, dann wird diese Methode nur einmal aufgerufen werden, und es wird einige Standard-Koordinaten zurückzukehren.

Ich hoffe es hilft.

Beantwortet am 21/09/2009 um 06:36
quelle vom benutzer

stimmen
2

Aus dem Dokument auf CLLocation , wenn die horizontale Genauigkeit oder vertikale Genauigkeit negativ ist, bedeutet es nicht einen Wert finden. Ich vermute , dass das , was hier geschieht. Denken Sie daran , dass , wenn Sie nur einmal sehen, es kann Ihnen eine ungefähre letzte bekannte Position , bevor überhaupt die Genauigkeit Ergebnis zu verbessern.

Horizontale Genauigkeit Die die Koordinaten Breiten- und Längen identifizieren die Mitte des Kreises und dieser Wert gibt den Radius des Kreises. Ein negativer Wert zeigt an, dass die Breite und Länge des Koordinaten sind ungültig.

Beantwortet am 19/09/2009 um 21:55
quelle vom benutzer

stimmen
1

Wie Kendall sagte, wird die MKMapView keinen Benutzer Lage haben , bis es fertig geladen, und die viewDidLoad Methode ist in der Regel zu früh , es zu beantragen. Eine einfachere Art und Weise als Corelocation verwendet , ist die MKMapViewDelegate Methode zu implementieren -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation. Es wird Ihnen die Position des Benutzers, sobald sie sich befindet, ohne mit einem CLLocationManager zu beschäftigen.

Beantwortet am 08/01/2013 um 18:33
quelle vom benutzer

stimmen
1

Sie sollten die von Corelocation koordinieren bekommen statt MapKit. MapView wird der Standort des Benutzers angezeigt werden, nachdem es tatsächlich aktuellen Standort bekam. Bevor der Ort bestimmt wird, werden die Breite und Länge beide auf 0. 3

Sie sollten einen CLLocationManager instace, Set-Delegaten. Sie werden benachrichtigt, wenn der Standort bestimmt wird.

Beantwortet am 20/09/2009 um 06:17
quelle vom benutzer

stimmen
0

Versuchen Sie, diese in

CLLocation *userLoc = mapView.userLocation.location;
CLLocationCoordinate2D userCoordinate = userLoc.coordinate;

NSLog(@"user latitude = %f",userCoordinate.latitude);
NSLog(@"user longitude = %f",userCoordinate.longitude);

ViewDidAppear: oder rufen seletor nach Verzögerung durchzuführen

Beantwortet am 05/05/2014 um 12:32
quelle vom benutzer

stimmen
0

Diese Antwort wird erläutert, wie mit einem Benutzer-Standort eine Kartenansicht einzustellen:

HowTo initialisieren MKMapView mit einem bestimmten Benutzer-Standort?

Beantwortet am 09/03/2010 um 16:52
quelle vom benutzer

stimmen
-1

Fügen Sie diese auf Ihrem viewDidLoad Abschnitt

mapView.showsUserLocation = YES;
Beantwortet am 02/05/2010 um 05:56
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more