Question

I am showing the user location on a mapView with:

self.mapView.showsUserLocation = YES;

The user gets prompted the AlertView where he can choose whether to allow to use the current location or not. If he presses yes everything is ok and I do not worry about it.

But if he presses NO I would like to zoom to a specific region.

So how do I know whether the MKMapView is allowed to use the current location?

I found the solution where I would create my own CLLocationManager and its delegate to see if it returns an denied error. But this does not quite feel right, why introduce a new CLLocationManger if I do not need it.

Isn't there an other way?

Was it helpful?

Solution

You don't need a delegate. Just use the CLLocationManager class method authorizationStatus:

if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorized) {
    // allowed
} else {
    // not allowed
}

The possible values are:

typedef enum {
   kCLAuthorizationStatusNotDetermined = 0,
   kCLAuthorizationStatusRestricted,
   kCLAuthorizationStatusDenied,
   kCLAuthorizationStatusAuthorized
} CLAuthorizationStatus;
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top