如何在iOS应用程序中解决核心位置逻辑

我在我的应用中遇到core location逻辑问题。 以下代码位于rootviewcontroller 。 它应该testing,看看,如果用户已经允许的GPS /位置服务的应用程序开启或closures ,然后作出决定,并移动到两个view controllers

应用程序启动时应运行此testing。 此外,如果用户进入device Settings并更改Privacy > Location Services > App Name > ON/OFF并重新启动应用程序,那么它应该再次通过该过程。

这是我迄今为止的代码:

 #import <CoreLocation/CoreLocation.h> -(void) viewWillAppear:(BOOL)animated { CLController = [[CoreLocationController alloc] init]; CLController.delegate = self; [CLController.locMgr startUpdatingLocation]; #ifdef DEBUG NSLog(@"RootViewController"); #endif spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; spinner.center = self.view.center; spinner.hidesWhenStopped = YES; [self.view addSubview:spinner]; [spinner startAnimating]; } -(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status { if (status == kCLAuthorizationStatusDenied) { // denied [self performSegueWithIdentifier: @"SegueOffersNoGPS" sender: self]; [CLController.locMgr stopUpdatingLocation]; }else if (status == kCLAuthorizationStatusAuthorized) { // allowed [self performSegueWithIdentifier: @"SegueOffersGPS" sender: self]; [CLController.locMgr stopUpdatingLocation]; } } - (void)locationUpdate:(CLLocation *)location { //locLabel.text = [location description]; #ifdef DEBUG NSLog(@"auth status is %u", [CLLocationManager authorizationStatus]); #endif [self performSegueWithIdentifier: @"SegueOffersGPS" sender: self]; } - (void)locationError:(NSError *)error { [self performSegueWithIdentifier: @"SegueOffersNoGPS" sender: self]; } - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([[segue identifier] isEqualToString:@"SegueOffersNoGPS"]) { self.navigationController.toolbarHidden=YES; #ifdef DEBUG NSLog(@"auth status no GPS"); #endif } if ([[segue identifier] isEqualToString:@"SegueOffersGPS"]) { self.navigationController.toolbarHidden=NO; #ifdef DEBUG NSLog(@"auth status is GPS"); #endif } } -(void)viewDidDisappear:(BOOL)animated { [CLController.locMgr stopUpdatingLocation]; [spinner stopAnimating]; } 

谢谢你的帮助。

仅供参考:我以前曾经问过这个问题,并认为这个问题已经解决了。 它仍然坚持,但我无法弄清楚…

 if (![self locationManager] .location) { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Location Service Disabled" message:@"To re-enable, please go to Settings and turn on Location Service for this app." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; return; }