【问题标题】:How to turn off location services?如何关闭定位服务?
【发布时间】:2011-02-26 01:03:14
【问题描述】:

如果用户开启了定位服务,我将我的 RootController 指定为其委托:

appDelegate.clLocationManager.delegate = self;

其中 appDelegate 是我的应用程序委托的一个实例,这是我拥有位置服务实例的地方。 clLocationManager 是 CLLocationManager 的一个实例。如果我发现用户不在某个区域,我想禁用位置服务委托。我这样做:

appDelegate.clLocationManager.delegate = nil;

但是这个方法仍然会触发:

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

是否有其他方法可以禁用定位服务或至少阻止其方法触发?

【问题讨论】:

    标签: iphone objective-c cocoa-touch cllocationmanager


    【解决方案1】:

    是的,你需要告诉它停止更新位置:

    [appDelegate.clLocationManager stopUpdatingLocation];
    

    之后你也可以释放它。

    详情请见the documentation

    【讨论】:

    • 谢谢。我试过了,但在调用 stopUpdatingLocation 后 didUpdateToLocation 又触发了 3 次。不应该立即停止更新吗?
    • 为了让它工作,我必须释放并立即分配位置管理器。
    • @4thSpace 您介意提供有关如何修复它的代码吗?老实说,我认为苹果在这方面搞砸了。我根本无法停止定位服务,我已经尝试了所有方法。
    • @4thSpace @Fulvio 我同意这很奇怪。我通过创建BOOL locationManagerIsUpdating 来修复它,并在我开始更新时手动设置TRUE,在我停止更新时手动设置FALSE。然后当我得到更新时,我会检查布尔值的状态。
    • 我通过调用 stopUpdatingLocation 并将委托设为 nil 解决了这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 2014-08-10
    • 2013-11-08
    • 1970-01-01
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多