2012-06-29 9 views
8

Estoy escribiendo una aplicación de Mac que necesita usar los servicios de CoreLocation. El código y la ubicación funcionan bien, siempre que autentique manualmente el servicio dentro del panel de preferencias de seguridad. Sin embargo, el marco no aparece automáticamente con un cuadro de diálogo de permisos. La documentación indica:Mac CoreLocation Services no solicita permisos

Importante El usuario tiene la opción de denegar el acceso de una aplicación a los datos del servicio de ubicación. Durante sus usos iniciales por una aplicación , la infraestructura Core Location solicita al usuario que confirme que el uso del servicio de ubicación es aceptable. Si el usuario niega la solicitud , el objeto CLLocationManager informa de un error apropiado en su delegado en futuras solicitudes.

Recibo un error de mi delegado y el valor de + locationServicesEnabled es correcto en CLLocationManager. La única parte que falta es el aviso al usuario sobre los permisos. Esto ocurre en mi desarrollo MPB y un amigo MBP. Ninguno de nosotros puede descubrir qué está mal.

¿Alguien ha topado con esto?

código relevante:

_locationManager = [CLLocationManager new];  
[_locationManager setDelegate:self]; 
[_locationManager setDesiredAccuracy:kCLLocationAccuracyKilometer]; 
... 
[_locationManager startUpdatingLocation]; 
+0

nos dan la información completa sobre el error para un comienzo –

+0

Es el error genérico del marco CoreLocation da cuando es incapaz de localizar un usuario. 'kCLErrorLocationUnknown' –

+0

Por favor, puede proporcionar el ID de radar para el informe de errores. Lo veré lo antes posible. –

Respuesta

2

me encontré con que en el Mac, que al iniciar los servicios de localización llamando

[locationManager startUpdatingLocation]; 

Se dispara

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status 

con un estado de

kCLAuthorizationStatusNotDetermined 

Si observa este estado, luego comience a actualizar la ubicación de nuevo, activa el cuadro de diálogo de permisos: p.

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status 
{ 
    switch (status) { 
     case kCLAuthorizationStatusAuthorized: 
      NSLog(@"Location Services are now Authorised"); 
      [_locationManager startUpdatingLocation]; 

      break; 

     case kCLAuthorizationStatusDenied: 
      NSLog(@"Location Services are now Denied"); 
      break; 

     case kCLAuthorizationStatusNotDetermined: 
      NSLog(@"Location Services are now Not Determined"); 

      // We need to triger the OS to ask the user for permission. 
      [_locationManager startUpdatingLocation]; 
      [_locationManager stopUpdatingLocation]; 

      break; 

     case kCLAuthorizationStatusRestricted: 
      NSLog(@"Location Services are now Restricted"); 
      break; 

     default: 
      break; 
    } 
} 
Cuestiones relacionadas