【问题标题】:stop location updating on iPhone在 iPhone 上停止位置更新
【发布时间】:2011-10-02 13:05:27
【问题描述】:

我正在使用以下代码来停止位置更新

[locationManager stopUpdatingLocation];
locationManager.delegate = nil;

但是在调用事物函数之后,位置服务仍然没有停止并且仍然试图找到位置,任何人都可以帮助我做错了什么。

提前致谢。

【问题讨论】:

  • locationManager 实际上是 CLLocationManager 的一个实例,还是可能是 nil ?请通过调试器或NSLog(@"%@", locationManager); 进行验证。因为如果它是nil,那么您将不会收到错误消息,但根本不会发生任何事情。
  • 感谢 DarkDust - 我找到了解决方案,我从您的评论中得到了想法......
  • 我在调用位置管理器的地方,值为 NULL,由于我无法停止位置服务更新,我解决了这个问题并在 didUpdateToLocation: 方法中调用了这个函数,现在可以正常工作.

标签: iphone ios4 core-location


【解决方案1】:

当它不会停止更新位置时,我遇到了同样的问题。不过,我并没有尝试取消委托,因为问题是在我的“locationManager:didUpdateToLocation:fromLocation:”方法中,在实际停止更新位置之前调用了其他方法,我调用了我自己的方法(从服务器下载对象)。没关系,直到我不得不下载太多。我想问题是它尝试下载它们的时间过长,以至于无法一遍又一遍地调用“didupdatelocation”。

为此我想到了两种解决方案(至少对我而言):

  1. 在停止管理器后做一些事情。 - 由于某种原因,这不起作用,我仍然有多个电话。
  2. 异步处理。 - 这对我来说似乎很有效。

我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    通常你使用的代码 [locationManager stopUpdatingLocation];应该适用于停止更新位置。但如果这不起作用,那么您可以采用以下另一种解决方案:

    -(void)viewDidLoad
    

    { firstTime = TRUE; }

    - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {

    if(firstTime = TRUE)
    {
        firstTime = FALSE;
        current_Latitude=newLocation.coordinate.latitude;
        current_Longitude= newLocation.coordinate.longitude;
    }
    

    }

    在这里您可以使用一个 BOOL 变量来检查您是否更新了位置。

    【讨论】:

    • 1) 请格式化您的帖子。 2) 如果您使用实例变量,它们默认为您应该利用的NO,因此您应该测试NO(或FALSE)而不是YES(或TRUE)。变量名应该反映这一点。否则,您必须在 init 中初始化变量。 3) 在您的if 中,您(不小心?)完成了分配而不是比较,该术语将始终为真。
    【解决方案3】:
    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 2011-09-10
    • 2017-05-30
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多