2012-06-29 12 views
8

Sto scrivendo un'app per Mac che deve utilizzare i servizi di CoreLocation. Il codice e la posizione funzionano correttamente, purché autentichi manualmente il servizio nel riquadro delle preferenze di sicurezza. Tuttavia, il framework non si apre automaticamente con una finestra di dialogo di autorizzazione. La documentazione indica:Mac CoreLocation Services non richiede autorizzazioni

Importante L'utente ha la possibilità di negare l'accesso di un'applicazione ai dati del servizio di posizione. Durante l'utilizzo iniziale da parte di un'applicazione , il framework Posizione nucleo richiede all'utente di confermare che l'utilizzo del servizio di localizzazione è accettabile. Se l'utente rifiuta la richiesta , l'oggetto CLLocationManager segnala un errore appropriato a suo delegato durante le richieste future.

Ottengo un errore al mio delegato e il valore di + locationServicesEnabled è corretto su CLLocationManager. L'unica parte mancante è la richiesta all'utente delle autorizzazioni. Ciò si verifica sul mio MPB di sviluppo e su un MBP di amici. Nessuno di noi può capire che cosa non va.

Qualcuno si è imbattuto in questo?

codice rilevante:

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

Dacci tutti i dettagli dell'errore per un inizio –

+0

È l'errore generico del quadro CoreLocation dà quando è in grado di individuare un utente. 'kCLErrorLocationUnknown' –

+0

Si prega di fornire l'ID del radar per la segnalazione di bug che otterrò guardato al più presto. –

risposta

2

ho scoperto che su Mac, che quando si avvia servizi di localizzazione chiamando

[locationManager startUpdatingLocation]; 

Si innesca

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

con uno stato di

kCLAuthorizationStatusNotDetermined 

Se si guarda questo stato, quindi si avvia di nuovo l'aggiornamento della posizione, si attiva la finestra di dialogo delle autorizzazioni: ad es.

- (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; 
    } 
} 
Problemi correlati