Domanda

Sto cercando di ottenere gli utenti latitudine e la longitudine con questo metodo viewDidLoad. La mappa risultante è correttamente indica la posizione corrente tuttavia la NSLog mostra costantemente:

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

Qualcuno sa che cosa mi manca qui? Grazie in anticipo per il vostro aiuto!

- (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);
}
È stato utile?

Soluzione

La mappa non cercherà di ottenere la posizione degli utenti fino a quando è effettivamente visualizzato, per quanto ne so. Una buona prova di ciò è, quando si fa a ottenere la finestra di dialogo che chiede se va bene per l'applicazione per ottenere la posizione degli utenti? Nella mia esperienza che ha sempre messo a punto solo dopo che la mappa mostra sullo schermo.

Il modo migliore per affrontare questo problema se è necessario disporre di una posizione all'avvio, è quello di implementare il codice Location gestore classico Core e ottenere la posizione da quella inizialmente. Si può smettere di ricevere gli aggiornamenti da lì una volta che la mappa è e ottenere ulteriori modifiche da lì (anche se avete bisogno di aggiornamenti costanti si sta meglio solo mantenendo con gli aggiornamenti normali Core Location. Se ci pensate, quando si dispone di "mostra utente posizione" abilitato nella mappa ulteriore utilizzo di core Location per la vostra applicazione è essenzialmente libero dal momento che il GPS sarà licenziato per tutto il tempo in ogni caso.

Altri suggerimenti

Se si tenta di ottenere coordinate utente in viewDidLoad () metodo, darà sempre 0,0 risultato, perché non è ancora inizializzato.

Si dovrebbe dare un'occhiata a "Dove mi trovo" sito Apple sotto forma di codice di esempio. Spiega che cosa avete bisogno. È necessario utilizzare CLLocationManager classe . Sarà inoltre necessario il metodo

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

Questo metodo verrà chiamato automaticamente ogni volta quando posizione dell'utente viene aggiornata. Se si utilizza il simulatore, allora questo metodo sarà chiamato una sola volta e tornerà alcune coordinate di default.

Speranza che aiuta.

Dal documento su CLLocation , se la precisione orizzontale o precisione verticale è negativa, significa che non può trovare un valore. Ho il sospetto che è quello che sta accadendo qui. Tenete a mente che se si guarda una volta, si può dare una ultima posizione approssimativa conosciuta prima di migliorare sempre il risultato precisione.

  

Precisione orizzontale   La coordinata di latitudine e la   longitudine identificare il centro del   cerchio e questo valore indica la   raggio di quel cerchio. Un negativo   valore indica che il coordinata   latitudine e longitudine non sono validi.

Si dovrebbe ottenere la coordinata dal CoreLocation invece di MapKit. MapView visualizzerà la posizione dell'utente dopo che in realtà ha posizione corrente. Prima che la posizione è determinata, la latitudine e la longitudine sono entrambe impostate a 0. 3

È necessario creare un instace CLLocationManager, impostare delegato. Riceverai una notifica quando la posizione è determinata.

Kendall Detto questo, il MKMapView non hai posizione dell'utente fino a quando non termina il caricamento, e la metodo viewDidLoad è di solito troppo presto per farne richiesta. Un modo più semplice rispetto all'utilizzo CoreLocation è quello di implementare il metodo MKMapViewDelegate -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation. Essa vi darà la posizione dell'utente non appena si trova, senza avere a che fare con un CLLocationManager.

Questa risposta spiega come impostare un guarda la mappa con una posizione utente:

HowTo inizializzare MKMapView con una data posizione dell'utente?

Prova questo in

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

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

viewDidAppear: o telefonare eseguire seletor dopo il ritardo

Aggiungi questo alla vostra sezione viewDidLoad

mapView.showsUserLocation = YES;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top