iOS 8 gps未启用

我解决了一个问题,即GPS服务在iOS 7上完美工作,但在iOS 8上,我从来没有获得权限请求和方法:

- (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 

永远不会被调用。

我的代码在这里:

 #import "Locator.h" @implementation Locator - (instancetype) init { if (self = [super init]) { // Start up the location manager self.locationManager = [[CLLocationManager alloc] init]; self.locationManager.delegate = self; self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; self.locationManager.distanceFilter = 3; // New property for iOS6 if ([self.locationManager respondsToSelector:@selector(activityType)]) { self.locationManager.activityType = CLActivityTypeFitness; } // New method for iOS8 if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) { [self.locationManager requestAlwaysAuthorization]; } } return self; } - (void) startMonitoring:(LocationChangeCallback)callback { if ([CLLocationManager locationServicesEnabled] && [CLLocationManager significantLocationChangeMonitoringAvailable]) { // Register an observer for if/when this app goes into background & comes back to foreground // NOTE: THIS CODE IS iOS4.0+ ONLY. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(switchToLowEnergyMode) name:UIApplicationDidEnterBackgroundNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(switchToAccurateMode) name:UIApplicationDidFinishLaunchingNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(switchToAccurateMode) name:UIApplicationWillEnterForegroundNotification object:nil]; UIApplicationState state = [[UIApplication sharedApplication] applicationState]; self.locationUpdateCallback = callback; if (state == UIApplicationStateActive) { [self switchToAccurateMode]; } else { [self switchToLowEnergyMode]; } } } - (void) switchToAccurateMode { NSLog(@"Accurate"); [self.locationManager stopMonitoringSignificantLocationChanges]; // Find the current location [self.locationManager startUpdatingLocation]; } - (void) switchToLowEnergyMode { NSLog(@"Low Energy"); [self.locationManager stopUpdatingLocation]; // Find the current location [self.locationManager startMonitoringSignificantLocationChanges]; } #pragma mark - CLLocationDelegate Methods - (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { // locations contains an array of recent locations, but this app only cares about the most recent // which is also "manager.location" if (self.locationUpdateCallback != nil) { self.locationUpdateCallback(manager.location); } } - (void) locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { NSLog(@"Location manager failed with error: %@", error); if ([error.domain isEqualToString:kCLErrorDomain] && error.code == kCLErrorDenied) { //user denied location services so stop updating manager [manager stopUpdatingLocation]; } } @end 

我也检查了位置设置,没有什么在我的应用程序名称后面。 其他应用程序(“始终”,“从不”或“正在使用”)。

对于IOS 8你必须添加NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescription键给你的plist。 否则它不会要求许可。

添加CLLocationManagerDelegate

 @implementation Locator <CLLocationManagerDelegate> - (instancetype) init { //...... self.locationManager.requestAlwaysAuthorization(); }