4

我正在开发地图应用程序,

我正在尝试使用[locationManager stopUpdatingLocation];方法来停止位置服务。

它似乎在 iOS4.3 中运行良好,但在 iOS5 中,它不起作用。

请任何人建议我如何在 iOS5 中停止定位服务?

4

2 回答 2

13

有时会发生位置管理器即使在之后也不会停止stopUpdationLocations

您需要为该集合释放您的位置管理器:

locationManager = nil;

这应该写在之后:

[locationManager stopUpdatingLocation];

另外,请注意不要在将 locationManager 对象设置为 nil 后调用它,否则您的应用程序将崩溃。

如果它仍然没有停止位置服务,那么有解决方案,如果您以后不想使用它,只需使用 BOOL 变量。

于 2012-12-24T06:31:25.893 回答
5

您可以从以下两个链接获得帮助:

链接-1:

http://iphonedevsdk.com/forum/iphone-sdk-development/2299-cllocationmanager-stopupdatinglocation-not-working.html

请参阅上面链接中的 site_reg 的答案:

我遇到了同样的问题,似乎可以通过在 .m 文件中声明一个静态 BOOL 并在输入 didUpdateToLocation 方法时检查它来解决。

@implementation MyFile
@synthesize MySynth;
static BOOL haveAlreadyReceivedCoordinates = NO;

然后在您的 didUpdateToLocation 方法中:

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

    if(haveAlreadyReceivedCoordinates) {
        return;
    }
    haveAlreadyReceivedCoordinates = YES;
    ...
}

从技术上讲,这不会使其停止接收更新,但它将忽略第一个更新之后的任何更新。如果您的应用程序依赖于仅获取一个位置更新来完成其工作,那么这应该会有所帮助。

编辑-1:

同样,一旦完成,您可以在行locationManager.delegate = nil;后添加[locationManager stopUpdatingLocation];

链接-2:

为什么 self.locationManager stopUpdatingLocation 不停止位置更新

请参阅上面链接中 jnic 的答案:

对面的startMonitoringSignificantLocationChanges不是 stopUpdatingLocation,是的 stopMonitoringSignificantLocationChanges

您可能希望替换 startMonitoringSignificantLocationChangesstartUpdatingLocation以进行更定期的更新,除非您有特定原因仅监视重大位置更改。

查看CLLocation 文档 以获取更多详细信息。

我添加了链接中的答案只是为了确保即使提供的链接将来出现故障,该答案也是有用的。

于 2012-12-24T06:38:10.660 回答