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 回答