2012-06-29 68 views
8

我正在編寫需要使用CoreLocation服務的Mac App。代碼和位置工作正常,只要我手動驗證安全首選項窗格內的服務。然而,框架不會自動彈出一個權限對話框。該文件指出:Mac CoreLocation服務不要求權限

重要用戶有拒絕到定位數據的應用程序的訪問 的選項。在 應用程序初次使用期間,核心位置框架會提示用戶確認 使用位置服務是可以接受的。如果用戶拒絕 請求,則CLLocationManager對象會在將來的請求中向其委託給 報告相應的錯誤。

我得到一個錯誤我的委託,和+ locationServicesEnabled的值是正確的CLLocationManager。唯一缺少的部分是提示用戶有關權限。這發生在我的開發MPB和朋友MBP上。我們都不知道什麼是錯的。

有沒有人遇到過這個?

相關代碼:

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

給我們的錯誤的完整細節開始 –

+0

這是一般性錯誤時,它無法找到用戶的CoreLocation框架給人。 'kCLErrorLocationUnknown' –

+0

請您提供錯誤報告的雷達ID,我會盡快查看它。 – 2012-07-08 20:43:17

回答

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; 
    } 
}