我正在编写一个使用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];
我没有代表,因为我看到了他们这样做的一些例子,但它真的需要吗?
答案 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在应该停止时停止。