位置服务指标保持“开启”

时间:2011-02-02 08:06:55

标签: iphone ios4 cllocationmanager dealloc

我创建了一个使用iPhone上的位置服务的小应用程序。一切都运作良好,除了事实,有时,即使我明确杀死应用程序,信息栏中的小箭头仍保持活动状态。 我使用了locationservices的后台模式,因此实现了appDelegate方法applicationWillResignActiveapplicationDidEnterBackgroundapplicationWillEnterForegroundapplicationDidBecomeActive,但是没有触及位置服务(嗯 - 我需要它们在后台模式)。

在该配置中,永远不会调用applicationWillTerminate;我在stopUpdatingLocation中将所有清理清理实现为dealloc,因为我找不到任何其他适合此位置的地方。但仍然 - 指标仍然存在。

有什么想法吗?

4 个答案:

答案 0 :(得分:13)

我遇到了同样的问题 - 应用程序将位置指示器保留在状态栏中。

我的问题原来是我最初调用了CCLocationManager的'startMonitoringSignificantLocationChanges'方法,这种方法可以提供粗略的位置信息,以便在我真正需要时提高分辨率。

不幸的是,一旦应用程序调用该方法一次,即使您随后删除该应用程序并重新安装它,它也将始终在状态栏中重新显示该图标,直到该应用程序在CCLocationManager上调用“stopMonitoringSignificantLocationChanges”以取消注册自身系统 - 完全痛苦,因为我必须保留该代码,直到它将自己整理出几个为我测试我的应用程序的人。

因此,如果您的应用已停止显示该图标,请确保您已通过停止呼叫匹配对“startMonitoringSignificantLocationChanges”的任何调用。

答案 1 :(得分:3)

如果您使用

开始了您的位置管理员工作
[MyLocationManagerInstance startMonitoringForSignificantLocationChanges];

然后你需要用:

来阻止它
[MyLocationManagerInstance stopMonitoringForSignificantLocationChanges];

如果强制终止应用程序,则不会调用applicationWillTerminate,因为从操作系统的角度来看,它显示为SIGKILL。

答案 2 :(得分:1)

我遇到了类似的问题。问题只发生在iPhone4上,但在我的3GS上运行完美。在查看我的代码之后,我发现在我的startUpdatingLocation方法中我使用了startUpdatingLocation和startMonitoringForRegion服务,但是,在我的stopUpdatingLocation方法中,我只是停止更新LocationLocation服务。我也通过关闭MonitoringForRegion解决了这个问题。

#pragma mark -
#pragma mark Location methods
- (void)startUpdatingLocation
{

    [self.locationManager startUpdatingLocation];

    [self.locationManager startMonitoringForRegion:desRegion desiredAccuracy:50.0f];
}

- (void)stopUpdatingLocation
{
    [self.locationManager stopUpdatingLocation];

        //  !!!: fix location service indicator stuck issue
    [self.locationManager stopMonitoringForRegion:desRegion];
}

答案 3 :(得分:0)

好的,问题解决了。指示灯将保持亮起,直到找到新位置。然后,如果其他一切都正确,指示灯将熄灭。