2011-11-29 45 views
1

我完全难以理解使用CoreLocation的问题。CoreLocation GPS状态栏指示不会消失

我已经检查了一些其他问题和谷歌,但似乎无法找到任何人有这个特殊问题我有。

我在我的应用程序中使用CoreLocation,当我打电话给[manager startUpdatingLocation]时,状态栏上的蓝色小箭头出现,服务开始,一切正常。

在应用程序我有一个的UITabBarController,现在只有第一个选项卡利用CoreLocation的所以我的第一个标签视图控制器的viewDidDisappear方法,我称之为[manager stopUpdatingLocation]

现在,这里是哪里出了问题,如果我手动只需轻按不同的标签,然后小蓝箭头消失,并重新出现,因为我在标签之间来回,如我所期望的那样。

但是,在第一个选项卡上执行某些操作时,它会自动通过[self.tabBarController setSelectedIndex:1]切换到另一个选项卡,发生这种情况时,状态栏上的蓝色箭头不会消失,即使我不断地来回穿过这些箭头现在基本上就停留在那里,只要应用程序处于活动状态(如果应用程序进入后台,它就会消失,但如果它再次变为活动状态,它将重新出现在任何选项卡上并保持停留在那里) 。

现在我想,也许改变标签编程方式不叫viewDidDisappear,所以我把一个断点,但它确实被调用。

然后,我想......好吧,也许如果我打电话[manager stopUpdatingLocation]就在我打电话[self.tabBarController setSelectedIndex:1],可以解决问题,但也没有做任何事情。

现在我失去了想法和任何帮助将不胜感激。 P:我已经测试过Corelocation委托方法是否仍然被调用,除非最初的选项卡打开,否则它们似乎不再被调用,所以看起来好像CoreLocation已经停止。但是,从用户角度来看,情况似乎并非如此。

编辑:看起来这可能是一些第三方库的一个问题,所以是不是真的东西,都可以回答

+0

一些类似的问题已经最近问,或许其中一人会帮忙? [here](http://stackoverflow.com/q/8155456/154803)或[here](http:// stackoverflow。com/q/7881743/154803) – progrmr

回答

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]; 
} 
+0

在这种情况下,当我通过点击它们手动更改标签时,它为什么会消失? – Jason

+0

在这种情况下,经理必须获得释放。 –

+0

原来我错了,查看更新后的答案。 –