StopUpdatingLocation方法不适用于iOS5

时间:2012-12-24 05:52:27

标签: iphone objective-c cocoa-touch ios5 ios4

我正在制作地图应用程序,

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

似乎它在iOS4.3中运行良好,但在iOS5中,它无效。

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

2 个答案:

答案 0 :(得分:13)

有时,即使在stopUpdationLocations

之后,位置管理员也不会停止

您需要为该集

发布您的位置管理员
locationManager = nil;

这应该写在

之后

[locationManager stopUpdatingLocation];

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

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

希望这可以帮到你!

答案 1 :(得分: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];

LINK-2:

why self.locationManager stopUpdatingLocation doesn't stop location update

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

  

startMonitoringSignificantLocationChanges相反的情况并非如此   stopUpdatingLocation,它是   stopMonitoringSignificantLocationChanges

     

您可能想要替换   startMonitoringSignificantLocationChanges   startUpdatingLocation为了更加定期更新,除非   你有一个特定的原因只监测重要的   位置变化。

     

查看CLLocation documentation   有关详细信息。

我已添加链接中的答案,以确保即使将来提供的链接失败,答案仍然有用。