0

core location我的应用程序中的逻辑有问题。以下代码位于rootviewcontroller. 它应该测试以查看用户是否允许为应用程序打开或关闭 gps/位置服务,然后做出决定并移至两者之一view controllers

该应用程序应在启动时运行此测试。此外,如果用户进入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];

}

谢谢你的帮助。

仅供参考:我之前确实问过这个问题,并认为它已经解决了。它仍然持续存在,我无法弄清楚......

4

1 回答 1

2
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;
    }
于 2013-02-20T16:20:44.670 回答