我刚刚开始我的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>
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
@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];
}
Run Code Online (Sandbox Code Playgroud)
确保视图控制器实现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];
}
}
Run Code Online (Sandbox Code Playgroud)
添加此方法以侦听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];
}
}
Run Code Online (Sandbox Code Playgroud)
最后确保您的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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2749 次 |
| 最近记录: |