我刚开始我的iOS 8项目,我也遇到了一个问题,我无法提出问题以获得许可。我在info.plist中添加了以下内容
<key>NSLocationWhenInUseUsageDescription</key>
<string>The spirit of stack overflow is coders helping coders</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>I have learned more on stack overflow than anything else</string>
这是我的代码:
@interface ViewController () <MKMapViewDelegate>
@property (nonatomic, strong) UIPopoverController* userDataPopover;
@property (weak, nonatomic) IBOutlet MKMapView *mapView;
@property (strong, nonatomic, retain) CLLocationManager *locationManager;
@end
@implementation ViewController
-(CLLocationManager *)locationManager
{
if(!_locationManager) _locationManager = [[CLLocationManager alloc]init];
return _locationManager;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.mapView.delegate = self;
[self.locationManager requestWhenInUseAuthorization];
//[self.locationManager requestAlwaysAuthorization];
[self.locationManager startUpdatingLocation];
self.mapView.showsUserLocation = YES;
[self.mapView showsUserLocation];
[self.mapView setMapType:MKMapTypeStandard];
[self.mapView setZoomEnabled:YES];
[self.mapView setScrollEnabled:YES];
}
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(userLocation.coordinate, 800, 800);
[self.mapView setRegion:[self.mapView regionThatFits:region] animated:YES];
}
答案 0 :(得分:7)
确保您的视图控制器实现CLLocationManagerDelegate并导入#import CoreLocation / CoreLocation.h
- (void)viewDidLoad
{
[super viewDidLoad];
[self setLocationManager:[[CLLocationManager alloc] init]];
if([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]){
[self.mapview setShowsUserLocation:NO];
[self.locationManager setDelegate:self];
[self.locationManager requestWhenInUseAuthorization];
}
else{
//Before iOS 8
[self.mapview setShowsUserLocation:YES];
}
}
添加此方法以侦听AuthorizationStatus更改
-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
if (status == kCLAuthorizationStatusDenied) {
// permission denied
[self.mapview setShowsUserLocation:NO];
}
else if (status == kCLAuthorizationStatusAuthorized) {
// permission granted
[self.mapview setShowsUserLocation:YES];
}
}
最后确保您的plist具有Sanne指出的以下条目
<key>NSLocationWhenInUseUsageDescription</key>
<string>The spirit of stack overflow is coders helping coders</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>I have learned more on stack overflow than anything else</string>
答案 1 :(得分:1)
它是ios 10的新功能 现在在plist文件中添加位置权限
如果没有在plist中添加权限,则权限弹出窗口不显示
在plist中添加以下权限
1.Privacy - 使用中的位置用法说明
2.Privacy - 位置始终用法说明