Метод класса locationServicesEnabled проверяет только глобальные параметры для служб определения местоположения.AFAIK, нет способа проверить, было ли ваше приложение явно отклонено.Вам нужно будет дождаться сбоя запроса о местоположении и использовать метод CLLocationManagerDelegate locationManager: didFailWithError: , чтобы сделать все, что вам нужно.Например:
- (void)locationManager: (CLLocationManager *)manager
didFailWithError: (NSError *)error {
NSString *errorString;
[manager stopUpdatingLocation];
NSLog(@"Error: %@",[error localizedDescription]);
switch([error code]) {
case kCLErrorDenied:
//Access denied by user
errorString = @"Access to Location Services denied by user";
//Do something...
break;
case kCLErrorLocationUnknown:
//Probably temporary...
errorString = @"Location data unavailable";
//Do something else...
break;
default:
errorString = @"An unknown error has occurred";
break;
}
}
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:errorString delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[alert show];
[alert release];
}
См. Документацию по константам CLError в справочнике по классу CLLocationManager для получения дополнительных опций.