2012-06-29 6 views
8

Я пишу приложение Mac, которое должно использовать службы CoreLocation. Код и местоположение работают нормально, пока я вручную проверю подлинность службы внутри панели предпочтений безопасности. Однако структура автоматически не открывается с помощью диалогового окна разрешения. В документации указано:Mac CoreLocation Services не запрашивает разрешения

Важная информация Пользователь имеет право отказать в доступе приложения к данным службы определения местоположения. Во время своего первоначального использования с помощью приложения базовая структура ядра предлагает пользователю подтвердить , что использование службы определения местоположения является приемлемым. Если пользователь отрицает запрос , объект CLLocationManager сообщает о соответствующей ошибке ее делегату во время будущих запросов.

Я получаю сообщение об ошибке для своего делегата, а значение + locationServicesEnabled верна в CLLocationManager. Единственная недостающая часть - это запрос пользователю о разрешениях. Это происходит на моем MPB разработки и друзья MBP. Никто из нас не может понять, что случилось.

Кто-нибудь сталкивался с этим?

Соответствующий код:

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

Дайте нам полную информацию об ошибке для начала –

+0

Это общая ошибка рамка CoreLocation дает, когда он не в состоянии найти пользователь. 'kCLErrorLocationUnknown' –

+0

Пожалуйста, вы можете предоставить идентификатор радара для отчета об ошибке. Я получу его как можно скорее. –

ответ

2

я обнаружил, что на Mac, что при запуске службы определения местоположения по телефону

[locationManager startUpdatingLocation]; 

Это вызывает

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

со статусом

kCLAuthorizationStatusNotDetermined 

Если вы следите за этим статусом, затем снова начинайте обновление местоположения, оно вызывает диалог разрешения: например.

- (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; 
    } 
} 
Смежные вопросы