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];
}
谢谢你的帮助。
仅供参考:我之前确实问过这个问题,并认为它已经解决了。它仍然持续存在,我无法弄清楚......