/ / iOS 8 gps не е активиран - ios, aim-c, gps, cllocationmanager

iOS 8 gps не е активирана - ios, objective-c, gps, cllocationmanager

Реших проблем, че 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

Проверих и в настройките за местоположение и зад името на моето приложение нямаше нищо. Други приложения имат ("Винаги", "Никога" или "Докато използвате").

Отговори:

11 за отговор № 1

За IOS 8 трябва да добавите NSLocationAlwaysUsageDescription или NSLocationWhenInUseUsageDescription ключ към вашия плейст. В противен случай не иска разрешение.

добавете CLLocationManagerDelegate

@implementation Locator <CLLocationManagerDelegate>

- (instancetype) init {
//......
self.locationManager.requestAlwaysAuthorization();
}