我对使用CoreLocation的问题感到非常难过。
我已经检查了一些其他问题并且在谷歌上但似乎找不到任何有这个特殊问题的人。
我在我的应用程序中使用CoreLocation,当我调用[manager startUpdatingLocation]
时,状态栏上的蓝色小箭头出现,服务开始,一切都很顺利。
在app中我有一个UITabBarController,现在只有第一个Tab使用了CoreLocation,所以在我的第一个Tab ViewController的viewDidDisappear
方法中,我调用[manager stopUpdatingLocation]
现在这里出现了问题,如果我手动点击不同的标签,那么小蓝色箭头就会消失并重新出现,因为我在标签之间往返,就像我期望的那样。
然而,在第一个标签上执行某些操作后,它会自动切换到另一个标签[self.tabBarController setSelectedIndex:1]
,当发生这种情况时,状态栏上的蓝色箭头不会消失,即使我不断返回通过选项卡,只要应用程序处于活动状态,该箭头现在基本上就会停留在那里(如果应用程序进入后台,它确实会消失,但会重新出现在任何选项卡上,并且如果它变成之前一直停留在那里再次活跃)。
现在我想,也许以编程方式更改选项卡不会调用viewDidDisappear
,所以我在那里放了一个断点,但它确实被调用了。
然后我想......好吧,如果我在致电[manager stopUpdatingLocation]
之前致电[self.tabBarController setSelectedIndex:1]
来解决这个问题,但这也没有做任何事情。
现在我迷失了想法,任何帮助都会受到高度赞赏。
P.S:我已经测试过看看CoreLocation委托方法是否仍然被调用,除非初始标签打开,否则它们似乎不再被调用,所以看起来好像CoreLocation已经停止。但是,从用户的角度来看,情况似乎并非如此。
编辑:似乎这可能是某些第三方图书馆的问题,所以不是真正可以回答的问题
答案 0 :(得分:2)
在释放CLLocationManager之前,指示符不会消失。
编辑:我的初始答案不正确,当调用stopUpdatingLocation时,指标确实会消失。
编辑2:我创建了一个基本的测试应用程序,并且在viewDidDisappear中调用stopUpdatingLocation会导致指示符在我的情况下消失。第一个视图控制器的代码如下:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:YES];
if (locationManager == nil) {
self.locationManager = [[[CLLocationManager alloc] init] autorelease];
self.locationManager.delegate = self;
}
[self.locationManager startUpdatingLocation];
}
- (void)viewDidLoad {
[super viewDidLoad];
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = CGRectMake(20, 20, 280, 40);
[button setTitle:@"Go to Tab 2" forState:UIControlStateNormal];
[button addTarget:self action:@selector(buttonTapped) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
}
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
[self.locationManager stopUpdatingLocation];
}
- (void)buttonTapped {
[self.tabBarController setSelectedIndex:1];
}
答案 1 :(得分:0)
所以实际问题与我无法控制的闭源第三方库有关,所以这个问题没有真正的答案