GPS不会停止更新

时间:2011-03-31 12:08:57

标签: iphone objective-c ios4

我正在编写一个使用GPS数据的iPhone应用程序。我的问题是即使我杀了实际的过程,GPS也永远不会停止更新位置(箭头停留在状态栏上)。使其消失的唯一方法是卸载应用程序,或禁止它在系统设置中使用位置。

这就是我创建位置管理器的方式:

    // Create the location manager if this object does not
    // already have one.
    if (nil == locationManager)
        locationManager = [[CLLocationManager alloc] init];

    locationManager.delegate = regionTracker;

    locationManager.desiredAccuracy = kCLLocationAccuracyBest;

    // Set a movement threshold for new events.
    locationManager.distanceFilter = 1;

    [locationManager startUpdatingLocation];

在我的app委托中,我在applicationWillTerminate:和applicationDidEnterBackground中运行这两行:

   [self.viewController.locationManager stopUpdatingLocation];
   [self.viewController.locationManager setDelegate:nil];

我没有代表,因为我看到了他们这样做的一些例子,但它真的需要吗?

5 个答案:

答案 0 :(得分:7)

与milonet提到的相同,在我的情况下,除了stopUpdatingLocation之外,我还需要调用stopMonitoringSignificantLocationChanges。

答案 1 :(得分:2)

我怀疑CLLocationManager对象的保留/发布生命周期会发生一些有趣的事情。

在代表中,您将其视为财产。在viewController中,你将它视为iVar。

我宁愿您将其分配给self.locationManager而不是locationManager。假设这是一个带有retain setter语义的命名属性,然后你在viewController的release方法中-dealloc(可能在调用stopUpdatingLocation之后),你应该是好的去吧。

我自己也看到了同样的行为,但是我第一次在4.0之后玩CoreLocation并且后台出现了。我以为我的电池有问题,因为我刚买了一台iPhone 4.原来我只是在试用CoreLocation,无论我的应用程序是否正在运行。

答案 2 :(得分:1)

我找到了原因。在项目的早期阶段,我使用了iOS 4的区域功能,该功能注册了与应用程序标识符关联的系统的全局区域。

解决方案 - 制作一个新项目。

答案 3 :(得分:1)

我有同样的问题,位置经理总是保持不变! 除了gps之外,我已经尝试释放所有内容..关闭gps的唯一解决方案是删除应用程序!

答案 4 :(得分:1)

类似的事发生在我身上。我正在使用带有用户位置激活的mapView。我像往常一样解除分配位置管理器并且GPS仍处于活动状态。我禁用了该选项,gps在应该停止时停止。