8

CoreLocation サービスを使用する必要がある Mac アプリを作成しています。セキュリティ設定ペイン内でサービスを手動で認証する限り、コードと場所は正常に機能します。ただし、フレームワークは許可ダイアログで自動的にポップアップしません。ドキュメントには次のように記載されています。

重要 ユーザーには、位置情報サービス データへのアプリケーションのアクセスを拒否するオプションがあります。アプリケーションによる最初の使用時に、コア ロケーション フレームワークは、ロケーション サービスの使用が許容されることを確認するようにユーザーに求めます。ユーザーがリクエストを拒否した場合、CLLocationManager オブジェクトは、今後のリクエスト中にデリゲートに適切なエラーを報告します。

デリゲートにエラーが表示されますが、CLLocationManager の +locationServicesEnabled の値は正しいです。欠けている唯一の部分は、権限に関するユーザーへのプロンプトです。これは、私の開発 MPB と友人の MBP で発生します。私たちのどちらも、何が悪いのか理解できません。

誰かがこれに遭遇しましたか?

関連コード:

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

1 に答える 1

4

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;
    }
}
于 2014-04-26T10:38:27.167 に答える