2011-05-16 5 views
12

Mi propósito es obtener la longitud/latitud del usuario cuando se carga la vista y almacenar los valores en dos variables para cálculos posteriores. No necesito hacer un seguimiento de la ubicación del usuario y actualizarla, solo necesito obtener sus coordenadas una vez. Mi código es el siguiente:Obtención de longitud/latitud del usuario Cuando viewDidLoad

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // locationManager update as location 
    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.delegate = self; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    locationManager.distanceFilter = kCLDistanceFilterNone; 
    [locationManager startUpdatingLocation]; 
    CLLocation *location = [locationManager location]; 
    // Configure the new event with information from the location 
    CLLocationCoordinate2D coordinate = [location coordinate]; 

    float longitude=coordinate.longitude; 
    float latitude=coordinate.latitude; 

    NSLog(@"dLongitude : %f",longitude); 
    NSLog(@"dLatitude : %f", latitude); 
} 

En la consola me siguen dando esto:

dLongitude : 0.000000 
dLatitude : 0.000000 

¿Me podría ayudar allí?

+2

¿Está probando en un dispositivo o el simulador? – Eiko

+0

el simulador :) – Luca

+0

Puede simular su ubicación por simulador, no es importante. –

Respuesta

7

Para obtener la ubicación del usuario, incluso una vez necesita hacer locationManager para comenzar a actualizar las ubicaciones (lo hizo) e implementar el método de delegado que el administrador llama cuando se recupera la ubicación: no se puede obtener la ubicación del administrador de ubicación inmediatamente.

Si no desea rastrear la ubicación del usuario, simplemente deje de actualizar las ubicaciones en ese método de delegado una vez que se haya buscado la ubicación por primera vez (y guárdela si la necesita en el futuro).

+0

Hola, en 'locationManager' luego de asignar los valores de lon/lat en las variables, ¿cómo puedo dejar de actualizar la ubicación, lo hice '[locationManager stopUpdatingLocation]', ¿es esto suficiente? – Luca

+0

@Malek, sí, eso debería ser suficiente para dejar de rastrear las ubicaciones – Vladimir

+0

¿está bien, así que no tengo que implementar el método de delegado 'stopUpdatingLocation'? – Luca

7

Tan pronto como llame al [locationManager startUpdatingLocation]; su método viewDidLoad está hecho. Es necesario implementar

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

y

- (void) locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error 

que será llamado por su locationManager cuando se pone la ubicación, o cuando se produce un error. En ambos métodos, puede llamar al [locationManager stopUpdatingLocation].

Dentro del método didUpdateToLocation, debe mover todo su código de viewDidLoad, comenzando con CLLocation *location = [locationManager location]; Ahí es donde obtendrá los valores adecuados.

+0

eso es exactamente lo que hice, sin embargo, lo que obtengo para la longitud y también para los valores de latitud es este valor: '0.000000' por eso sigo confundiéndome es debido, es debido a un simulador, si es así, no tengo que preocuparme si pruebo mi aplicación en el dispositivo :) – Luca

6

Esto funcionó para mí

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // locationManager update as location 
    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.delegate = self; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    locationManager.distanceFilter = kCLDistanceFilterNone; 
    [locationManager startUpdatingLocation]; 
    [locationManager stopUpdatingLocation]; 
    CLLocation *location = [locationManager location]; 
    // Configure the new event with information from the location 

    float longitude=location.coordinate.longitude; 
    float latitude=location.coordinate.latitude; 

    NSLog(@"dLongitude : %f", longitude); 
    NSLog(@"dLatitude : %f", latitude); 
} 
+1

Mejor utilice la devolución de llamada de delegado y omita el uso de [locationManager stopUpdatingLocation]; justo después de comenzar. La detención se puede hacer en el método de descarga. – Dilshan

3

Prueba este Código

-(IBAction)Button:(id)sender 

{ 

locationManager = [[CLLocationManager alloc] init]; 

locationManager.delegate = self; 

locationManager.desiredAccuracy = kCLLocationAccuracyBest; 

locationManager.distanceFilter = kCLDistanceFilterNone; 

[locationManager startUpdatingLocation]; 

CLLocation *location = [locationManager location]; 

// Configurar el nuevo evento con la información de la ubicación

CLLocationCoordinate2D coordinate = [location coordinate]; 

NSString *latitude = [NSString stringWithFormat:@"%f", coordinate.latitude]; 

NSString *longitude = [NSString stringWithFormat:@"%f", coordinate.longitude]; 

NSLog(@"dLatitude : %@", latitude); 

NSLog(@"dLongitude : %@",longitude); 

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, 40, 250, 50)]; 

UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(50, 80, 200, 50)]; 

UILabel *myLabel1 = [[UILabel alloc] initWithFrame:CGRectMake(50, 120, 200, 100)]; 

myLabel.textColor = [UIColor blackColor]; 

myLabel1.textColor = [UIColor blackColor]; 

label.backgroundColor = [UIColor clearColor]; 

myLabel.backgroundColor = [UIColor clearColor]; 

myLabel1.backgroundColor = [UIColor clearColor]; 

[myLabel setText:latitude]; 

[myLabel1 setText:longitude]; 

label.text = @"Current Latitude And Longitude"; 

[self.view addSubview:label]; 

[self.view addSubview:myLabel]; 

[self.view addSubview:myLabel1]; 

} 
1

si está obtener Lat lan g ambos (0.00, 0.00)

esto puede ser la solución para su,

paso 1: NSLocationAlwaysUsageDescription o NSLocationWhenInUseUsageDescription

Añadir estos dos clave en Info.plist

paso 2: Y que [locationManager startUpdatingLocation]; inicio actualización

paso 3: y es necesario implementar dos mehthods

-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { 

} 

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ 



CLLocation * currentLocation = [locations lastObject]; 

    NSLog(@"Updated Lat %f",currentLocation.coordinate.longitude); 
    NSLog(@"Updated Lang %f",currentLocation.coordinate.latitude); 



} 

de CLLocationManagerDelegate en su interfaz ViewController.

**step 4:** 

-(void)viewDidLoad 
{ 
    [super viewDidLoad]; 
geocoder = [[CLGeocoder alloc] init]; 
    manager.delegate = self; 
    manager.desiredAccuracy = kCLLocationAccuracyBest; 
    [manager requestWhenInUseAuthorization]; 
    [manager requestAlwaysAuthorization]; 
    [manager startUpdatingLocation]; 


} 
Cuestiones relacionadas