【问题标题】:Location still monitoring after locationManager = nil and stopUpdatingLocation called在 locationManager = nil 和 stopUpdatingLocation 调用后,位置仍在监控
【发布时间】:2013-05-06 15:11:55
【问题描述】:

我正在尝试很多方法来阻止我的应用的位置更新,但似乎没有任何效果……

我在做什么(关于帖子:StopUpdatingLocation method not working for iOS5):

// Initialise my locationManager and start monitoring :
locationManager = [[CLLocationManager alloc] init];
[locationManager startUpdatingLocation];

// .. Some code to use the coordinates that locationManager gives me.

// To stop monitoring :
locationManager = nil;

你要知道我在方法中放置了[locationManager stopUpdatingLocation];

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations

所以位置只更新了 1 次(顺便告诉我这是否是个好主意……)。

我还尝试在主代码中将 [locationManager stopUpdatingLocation]; 放在 locationManager = nil; 之前,但是在这两种情况下,我的位置的蓝点仍在我的地图上移动……

我还设置了一个计时器,它在控制台中打印locationManager 对象,它给了我(null) 同时我的iPhone 5 上的蓝点仍在移动,所以我不明白...

或者也许点还在移动是因为另一件事,但不是因为 locationManager 更新?

我当然错过了一些东西,但我没有得到什么:/。

感谢您的想法和帮助。

【问题讨论】:

  • // 初始化我的 locationManager 并开始监控: locationManager = [[CLLocationManager alloc] init]; [locationManager startUpdatingLocation]; // .. 一些使用 locationManager 给我的坐标的代码。 // 停止监控:locationManager = nil;所有这一切都在一种方法中吗?那是错误的。
  • 是的..?怎么了 ? ://
  • 因为位置管理器已经分配为零。您将无法在回调 locationManager:didUpdateLocations: 中再访问它,因此如果您将 [locationManager stopUpdatingLocation] 放在回调中,它将无效。

标签: iphone ios objective-c cllocationmanager


【解决方案1】:

一种可能性:地图上移动的蓝点是因为您将 MKMapView 的 showsUserLocation 设置为 YES。它将跟踪,直到您将其设置为 NO。

另一种可能:这一行是错误的:

locationManager = nil;

不会停止监控,但它确实导致您无法参考位置管理器,所以现在您不能 停止监控!剪掉那条线。

【讨论】:

  • 感谢您的回答。但我认为showsUserLocation 只是 MKMapView 蓝点的“显示”属性,所以对我来说,这并不意味着位置监控停止。所以对我来说,将showsUserLocation 设置为 NO 不会停止后台监控任务。我错了 ?而且我不明白如果位置没有更新,为什么蓝点仍在移动:)。由于没有更新坐标值,该位置应保持不变。我又错了?
  • 阅读文档。 "只要此属性为 YES,地图视图继续跟踪用户的位置并定期更新。"
  • 好吧,我的错……谢谢你的回答。
  • 好的,所以如果不定期更新位置,就不可能保持蓝点显示。这就是我想要的:将蓝点保留在最后更新的坐标上,即使在关闭位置跟踪之后也是如此。所以我想我现在必须导入我自己的蓝点 png 图片并将其设置为带有最后位置坐标的新注释。
  • Swift 中的方式是什么?
【解决方案2】:

即使在我放置代码之后,我也遇到了同样的问题

[locationManager stopUpdatingLocation];
locationManager=nil;

我的应用程序正在使用 GPS 服务,这会不必要地消耗电池电量。这个问题的解决方法是关闭 MKMapView 的 showUserLocation 属性。

[self.mapView setShowsUserLocation:NO];

由于 MKMapView 继续使用您的 GPS service,即使 LocationManager 为零。

希望对你有帮助

【讨论】:

    【解决方案3】:

    使用这行代码

    [self.locationManager stopUpdatingLocation];
    self.locationManager.delegate = nil;
    self.locationManager = nil;
    

    谢谢!

    【讨论】:

      猜你喜欢
      • 2014-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-05
      相关资源
      最近更新 更多