Iphone 如何关闭定位服务?

Iphone 如何关闭定位服务?,iphone,objective-c,cocoa-touch,cllocationmanager,Iphone,Objective C,Cocoa Touch,Cllocationmanager,如果用户启用了位置服务,我将我的RootController指定为其委托: appDelegate.clLocationManager.delegate = self; 其中appDelegate是我的应用程序委托的一个实例,在这里我有location services实例。clLocationManager是clLocationManager的一个实例。如果我发现用户在某个区域之外,我想禁用位置服务代理。我这样做: appDelegate.clLocationManager.delegate

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

appDelegate.clLocationManager.delegate = self;
其中appDelegate是我的应用程序委托的一个实例,在这里我有location services实例。clLocationManager是clLocationManager的一个实例。如果我发现用户在某个区域之外,我想禁用位置服务代理。我这样做:

appDelegate.clLocationManager.delegate = nil;
但这种方法仍然会激发:

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

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

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

[appDelegate.clLocationManager stopUpdatingLocation];
之后,您也可以释放它


有关详细信息,请参阅。

谢谢。我试过了,但在调用StopUpdateLocation后,DidUpdateLocation又触发了三次。它不应该立即停止更新吗?为了让它正常工作,我必须先发布位置管理器,然后立即分配给它。@4thface您介意提供关于如何修复它的代码吗?老实说,我认为苹果在这件事上搞砸了。我根本无法让定位服务停止,我已经尝试了一切。@4thSpace@Fulvio我同意这很奇怪。我只是通过创建
BOOL locationmanagerisupdate
来修复它,并在开始更新时手动设置
TRUE
,在停止更新时手动设置
FALSE
。然后当我得到更新时,我检查布尔值的状态。我通过调用StopUpdateLocation并将委托设置为nil解决了这个问题。