¿Por qué no se llama al delegado de CLLocationManager en iPhone SDK 4.0?

Este es el código que tengo en mi clase AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { CLLocationManager *locationManager = [[CLLocationManager alloc] init]; locationManager.delegate = self; locationManager.distanceFilter = 1000; // 1 Km locationManager.desiredAccuracy = kCLLocationAccuracyKilometer; [locationManager startUpdatingLocation]; } 

Y este es el método de delegado que tengo en mi clase de AppDelegate

  //This is the delegate method for CoreLocation - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { //printf("AppDelegate latitude %+.6f, longitude %+.6f\n", newLocation.coordinate.latitude, newLocation.coordinate.longitude); } 

Está trabajando en 3.0, 3.1, 3.1.3, pero no está funcionando en el simulador 4.0 y en ambos dispositivos.

Cual es la razon ?

Tuve un error similar, y ahora está resuelto. El problema es declarar localManager variable localmente. Declare en su lugar como una variable de clase y asegúrese de que se conserve directamente o mediante retención de propiedad (o fuerte si usa ARC). ¡Eso resuelve el problema! El problema era que la variable locationManager se había liberado y nunca se actualizó el delegado. Aquí el código:

.h archivo:

 #import  #import  #import  @interface MapViewController : UIViewController  { @private MKMapView *_mapView; CLLocationManager *_locationManager; } @property(nonatomic, strong) CLLocationManager *locationManager; @end 

archivo .m:

 self.locationManager = [[CLLocationManager alloc] init]; _locationManager.delegate = self; _locationManager.desiredAccuracy = kCLLocationAccuracyBest; [_locationManager startUpdatingLocation]; 

Espero que ayude.

Does -locationManager:didFailWithError: en su delegado alguna vez se llama? Solo estoy pensando, tal vez denegó el acceso a los datos de ubicación en algún momento y ahora no se le solicita, pero se deniega el acceso.

¿Estás seguro de que no estás desasignando el administrador de la ubicación en algún lugar? El código que tiene muestra que se lo asignó en el método didFinishLaunching … pero luego se lo olvidó (aunque todavía se conserva y, por lo tanto, debería funcionar).

¿Incluso ve esa ventana emergente inicial que le pregunta si está bien obtener la ubicación del usuario?

Ponga los códigos en viewController “que se empuja a navigationController”.

Mi código es

En SomeViewController.h

 #import  @interface SomeViewController : UIViewController{ } @property (nonatomic, strong) CLLocationManager *locationManager; @end 

En SomeViewController.m

 #import "SomeViewController.h" @implementation SomeViewController -(void)findLocation{ if ([CLLocationManager locationServicesEnabled]) { if (!self.locationManager) { self.locationManager = [[CLLocationManager alloc] init]; self.locationManager.delegate = self; self.locationManager.distanceFilter = kCLDistanceFilterNone; self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; [self.locationManager startUpdatingLocation]; } } } -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ NSLog(@"didUpdateLocations"); CLLocation *lo = [locations objectAtIndex:0]; NSLog(@"latitude = %f, longitude = %f", lo.coordinate.latitude, lo.coordinate.longitude); [manager stopUpdatingHeading]; } -(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{ NSLog(@"didUpdateToLocation");} -(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{ NSLog(@"didFailWithError"); [manager stopUpdatingLocation]; } 

El problema que creo es debido a ARC, se lanza locationManager.