5

mapview を使用するアプリケーションを作成しました。マップにはMKMapKitライブラリを使用しました。ユーザーが警告ウィンドウで「許可」ボタンを選択すると、すべてが正常に機能します。しかし、ユーザーが「許可しない」を選択したことを検出したい。ほとんどの開発者が使用するデリゲートを見つけました

(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error

しかし、デリゲートは呼び出されません。

多分私は何かが欠けています。ヘッダー (.h) ファイルに実装しMKMapViewDelegateました。他に何かしなければならないことはありますか?

またはその他のようなクラスを追加する必要がありますCLLocationManagerか。

ありがとう、

4

3 に答える 3

16

位置情報サービスの承認ステータスの変化を監視するには、次のようなメソッドを取得するCLLocationManagerDelegateメソッドを実装する必要がありますlocationManager:didChangeAuthorizationStatus:

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

    if (status == kCLAuthorizationStatusDenied) {
        // permission denied
    }
    else if (status == kCLAuthorizationStatusAuthorized) {
        // permission granted
    }
}

可能な承認ステータスとその説明の完全なリストについては、CLAuthorizationStatusの公式ドキュメントを参照してください。

編集

のインスタンスが既にある可能性があります。これをCLLocationManagerと呼びましょうlocationManager。次に、デリゲートを実装するために、クラスをCLLocationManagerDelegateプロトコルに準拠させ (クラスのヘッダーで宣言できます。これは必須ではありませんが、いくつかの静的チェック機能を提供します)、次delegateのようなプロパティに割り当てます。locationManager

locationManager.delegate = self; //assuming that self is gonna be the delegate

説明どおりにすべてを行った場合、ドキュメントに記載されているように、承認が変更されるたびにコントローラーが呼び出されます。

このメソッドは、位置情報サービスを使用するアプリケーションの機能が変更されるたびに呼び出されます。

于 2012-12-17T08:45:24.967 に答える
2

これを試すことができますか:

if(![CLLocationManager locationServicesEnabled])
{
    // alert location services denied
}
于 2012-12-17T08:44:30.777 に答える
0
// in appdelegate put thecode

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

    if (status == kCLAuthorizationStatusDenied)
     {
        //location denied, handle accordingly
         NSLog(@"Dont allow");

    }
    else if (status == kCLAuthorizationStatusAuthorized)
    {
        NSLog(@"Allow");
        //hooray! begin startTracking
    }

}

// チェックするたびに

- (IBAction)showMapBtnPressed:(id)sender {

    if([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied)
    {
        NSLog(@"Dont allow");

    }else
    {
        NSLog(@" allow");
    }


}
于 2016-06-03T07:10:05.957 に答える