2012-09-20 62 views
7

He actualizado mi iOS SDK a la versión 6. Después de eso he compilado mi aplicación (funciona bien en iOS 4 & iOS 5) pero ahora los servicios de ubicación no funcionan. Mi delegate no está recibiendo ninguna actualización y la ubicación flecha superior no aparece ... estoy empezando el servicio como la forma habitual:iOS 6 y Location Services no funcionan

[locationManager startUpdatingLocation]; 

Mi proyecto no es ARC.

¿Qué está pasando? Esto me está volviendo loco ...

Gracias de antemano.

Respuesta

4

Este es un cambio en iOS6:

Es necesario implementar locationManager:didUpdateLocations: en lugar de locationManager: didUpdateToLocation: fromLocation ser notificado cuando se actualiza la ubicación.

También debería leer la documentación sobre startUpdatingLocation.

+0

Gracias por su consejo.Ahora estoy usando locationManager: didUpdateLocations: pero nunca se llama. La flecha de ubicación no aparece ... En iOS6 no puedo ver la aplicación que estoy desarrollando en la configuración -> privacidad -> ubicación. Además, ahora a veces obtengo este registro: purgeIdleCellConnections: encontré uno para purgar conn = 0x1d5d2250. A veces no. ¿Cualquier pista? ¡Gracias por adelantado! – Samui

+0

Esto podría responder a su pregunta: http://stackoverflow.com/questions/12519733/location-services-not-working-in-ios-6 –

+0

Ya tengo ambos identificadores de paquetes, pero el problema aún persiste :( – Samui

-4

¿Estoy siendo demasiado simplista aquí? En Privacidad, Locations tiene el mismo aspecto que en los números anteriores. ¿Por qué tanto alboroto?

+2

"Works for me" no es lo más útil que podría tener agregado. – AndrewC

6

Asegúrese de tener un CFBundleDisplayName en el archivo .plist de su proyecto. Agregar esa llave lo solucionó por mí.

+0

Esto funcionó para mí. Gracias – Ryan

+0

Funcionó para mí. ¡Gracias! – ApplinguaRob

+0

¡Muchas gracias! Por qué diablos uno tiene algo que ver con el otro está más allá de mí. Los documentos dicen que ni siquiera incluir esa propiedad a menos que esté localizando. –

6

Simplemente configure la propiedad pausesLocationUpdatesAutomatically de Location Manager en NO. Esta es una nueva característica de IOS 6 que desactiva las Actualizaciones de ubicación cuando la aplicación se ejecuta en segundo plano. El valor predeterminado de esta propiedad es YES.

1

En mi caso, tuve la gerente de locación bajo una clase diferente y yo estaba llamando a esta clase del controlador principal. Esto no funcionaba y no se llamó a didUpdateLocations.

// 
// LocationServices.h 
// 

#import <Foundation/Foundation.h> 
#import <CoreLocation/CoreLocation.h> 

@interface LocationServices : NSObject <CLLocationManagerDelegate> { 
    CLLocationManager *locationManager; 

} 

@property (nonatomic, retain) CLLocationManager *locationManager; 

- (void)startLocationServices; 

@end 



// LocationServices.m 
#import "LocationServices.h" 

@implementation LocationServices 
@synthesize locationManager, currentLocation; 

- (void)startLocationServices { 
    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.delegate = self; 
    locationManager.pausesLocationUpdatesAutomatically = NO; 
    locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters; 

    if ([CLLocationManager locationServicesEnabled]) { 
     [locationManager startUpdatingLocation]; 

    } else { 
     NSLog(@"Location services is not enabled"); 
    } 
} 

//////////////////////////////////////////////// 
- (void)locationManager:(CLLocationManager *)manager 
    didUpdateLocations:(NSArray *)locations { 
    CLLocation* location = [locations lastObject]; 
    NSLog(@"Updated: latitude %+.6f, longitude %+.6f\n", 
      location.coordinate.latitude, 
      location.coordinate.longitude); 
} 
@end 

// Main controller 
- (void)viewDidLoad { 
    [super viewDidLoad]; 

..... 

LocationServices *locationSerices = [[LocationServices alloc]init]; 
[locationSerices startLocationServices]; 
...... 
} 

El código anterior no funciona. ¿Por qué? No sé ... fácilmente puede perder interés cuando pasa tanto tiempo tratando de hacer algo que se supone que es simple. iOS es un entorno de programación muy complicado y antipático. Hay muchas maneras de hacer una cosa, solo una funciona, no se puede mezclar y combinar sin introducir un problema. Tienes que hacer todo por el libro o tú o no obtienes nada. Ni siquiera un indicio de que usted hizo algo mal ... frustrante ...

En cambio, cuando he implementado locationManager: (CLLocationManager *) didUpdateLocations Manager: en el controlador principal de todo funcionaba bien

0

ajuste CFBundleDisplayName resuelto el problema para mí La misma actualización de ubicación nunca se llamó, simplemente configure el parámetro info.plist y comience a funcionar.

0

He intentado todo en archivos plist, limpia, reconstruye, nuevos objetivos, configuraciones, etc., etc. Nada funcionó. Pero FINALMENTE lo he arreglado. Tuve que crear un nuevo proyecto Xcode 4.5 desde cero, reconfigurarlo, agregar archivo por archivo y framework por framework manualmente. Parece que mi antiguo proyecto XCode tenía algo internamente incompatible con el último XCode. Escribo esto aquí porque tal vez puede salvar las próximas 10 horas de trabajo de alguien.