2011-03-21 1116 views
7

Estoy haciendo una aplicación en iphone sdk4.0. En eso no se llamó nunca al método de ubicación de actualización. He dado mi código a continuación. Por favor ayuda. Gracias de antemano.Método didUpdateLocation Nunca se llamó

-(id)init 
{ 
    [super init]; 

    obj=[[UIApplication sharedApplication]delegate]; 

    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.delegate = self; 
    //locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move 
    locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m 
    [locationManager startUpdatingLocation]; 

    return self; 

} 

-(void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation 
{ 
    NSLog(@"%f",newLocation.coordinate.latitude); 

    NSLog(@"%f",newLocation.coordinate.longitude); 

    obj=[[UIApplication sharedApplication]delegate]; 

    location=[[CLLocation alloc]initWithLatitude:newLocation.coordinate.latitude longitude:newLocation.coordinate.longitude]; 
    obj.lattitude1=[NSString stringWithFormat:@"%f",newLocation.coordinate.latitude]; 

    obj.longitude1=[NSString stringWithFormat:@"%f",newLocation.coordinate.longitude]; 
    //location=[[CLLocation alloc]initWithLatitude:39.9883 longitude:-75.262227]; 
} 
+0

finalmente funcionó ... no lo hice anything.I un nuevo proyecto que acaba de hacer y copiar todas las clases en it.i no saben cómo? Pero funcionó .. –

Respuesta

5

HI, sus códigos parecen correctos. ahora estos pueden ser posibles motivos:

en su inicio: intente comprobar si hay locationServicesEnabled o no.

locationManager = [[CLLocationManager alloc] init]; 
if(locationManager.locationServicesEnabled == NO){ 
    //Your location service is not enabled, Settings>Location Services 
} 

Otra razón, es posible que no permita obtener la ubicación de su aplicación. solución: simplemente elimine su aplicación de iPhone y vuelva a compilar, ahora debe abrir el cuadro de diálogo para permitir la ubicación.

uso esto para comprobar el error

- (void)locationManager:(CLLocationManager *)manager 
     didFailWithError:(NSError *)error 
{  
    NSLog(@"Error while getting core location : %@",[error localizedFailureReason]); 
    if ([error code] == kCLErrorDenied) { 
     //you had denied 
    } 
    [manager stopUpdatingLocation]; 
} 

de lo contrario todo parece bien, que ya estaba ejecutando IOS 4.0, que se pueden instalar en el iPhone 3G y más tarde, si era iPhone 2G, entonces este problema puede ocurrir.

+1

he añadido esto a mi aplicación ..it funciona gr8 ... –

1

¿Se -locationManager:didFailWithError: en su delegado nunca ser llamado? Tal vez haya denegado el acceso a los datos de ubicación en algún momento y ahora no se le solicite, pero se deniega el acceso.

0

Después de alloc y init su administrador de ubicación, verifique que los servicios de ubicación estén permitidos. Este código es de "LocateMe" ejemplo de código de Apple

if (locationManager.locationServicesEnabled == NO) { 
    UIAlertView *servicesDisabledAlert = [[UIAlertView alloc] initWithTitle:@"Location Services Disabled" message:@"You currently have all location services for this device disabled. If you proceed, you will be asked to confirm whether location services should be reenabled." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [servicesDisabledAlert show]; 
    [servicesDisabledAlert release]; 
} 

Si está probando con el simulador, trate de pruebas con un dispositivo en su lugar. El simulador requiere que la conexión WiFi de la computadora esté encendida y que pueda ubicar una estación base WiFi que esté en su base de datos de ubicaciones conocidas.

3

Si está probando esto en el simulador, no funcionará.

Esto ocurre porque ese método solo se invoca cuando el dispositivo cambia de ubicación (y el simulador nunca cambia de ubicación).

+0

No ... No estoy comprobando en el simulador ... Lo estoy comprobando en el dispositivo iphone –

+0

¿Has intentado llamar manualmente a la ubicación actual y asegúrate de tener una ubicación válida? Puede hacer esto usando locationManager.location. – Zebs

+7

Esto no es cierto, puedes simular movimiento ahora. 'Simulator -> Debug -> Location' – Peres

5

Asegúrese de haber agregado CLLocationManager como una propiedad.

@property (no atómico, fuerte) CLLocationManager * locationManager;

+1

Gabriel me has mostrado la mejor manera. Obtuve la solución ahora. Intenté llamar al método didupdateLocation pero no me llamó aunque lo apliqué todo excepto tu sugerencia. Finalmente apliqué CLLocationManager como propiedad. Ahora se llama al método de delegado y obtengo el valor de la ubicación de actualización (Lat, long). – user3182143

+0

Muchas gracias hermano – user3182143

+0

¿Podría decirme el motivo o la explicación sobre la propiedad CLLocationManager y por qué no funciona sin propert? – user3182143

18

Además, en iOS8 debe tener dos cosas adicionales:

  • agregar una clave a su Info.plist y solicitar la autorización del gerente de locación pidiendo que se inicie.

    • NSLocationWhenInUseUsageDescription

    • NSLocationAlwaysUsageDescription

  • necesita solicitar autorización para el método de localización correspondiente.

    • [self.locationManager requestWhenInUseAuthorization]

    • [self.locationManager requestAlwaysAuthorization]

Código ejemplo:

self.locationManager = [[CLLocationManager alloc] init]; 
self.locationManager.delegate = self; 
// Check for iOS 8. Without this guard the code will crash with "unknown selector" on iOS 7. 
if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) { 
    [self.locationManager requestWhenInUseAuthorization]; 
} 
[self.locationManager startUpdatingLocation]; 

Fuente: http://nevan.net/2014/09/core-location-manager-changes-in-ios-8/

+0

... y en general los métodos _Siempre_ son desaconsejados, use los otros si no está seguro de lo que está haciendo. – bshirley

Cuestiones relacionadas