didUpdateLocations只调用一次然后停止触发

时间:2014-09-12 16:43:24

标签: ios objective-c iphone core-location

我想创建一个简单的IOS 6.0应用程序,每次更改位置时都会在屏幕上显示lat / lon。 ViewController文件非常简单。

我分配一个CCLocationManager目标,设置其变量并启动它。 didUpdateLocations被调用一次或两次,然后它会停止被触发,即使移动iPhone也是如此。如果我按下主页按钮并重新打开应用程序,屏幕上的数据会在再次停止之前更新一次或两次。 在模拟它工作正常但不是真正的3GS iPhone。

如果我取消注释didUpdateLocations内的启动/停止并连续停止并启动服务,它会起作用,但电池会以极高的速率耗尽。

此外,这是一个更大项目的一部分,每次更改位置时都会调用didUpdateLocations

ViewController.h

#import <CoreLocation/CoreLocation.h>
@interface ViewController : UIViewController
@property (nonatomic , strong) CLLocationManager *locationManager;
@property (weak, nonatomic) IBOutlet UILabel *lbl;
@end

ViewConroller.m

#import "ViewController.h" @interface ViewController ()

@end

@implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; _locationManager = [[CLLocationManager alloc] init]; _locationManager.delegate = self; _locationManager.distanceFilter = kCLHeadingFilterNone; // whenever we move _locationManager.desiredAccuracy = kCLLocationAccuracyBest; _locationManager.PausesLocationUpdatesAutomatically = NO; [_locationManager startUpdatingLocation]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { CLLocation *newLocation = [locations lastObject]; _lbl.text=[NSString stringWithFormat:@"%lf %lf",newLocation.coordinate.latitude, newLocation.coordinate.longitude]; //[_locationManager stopUpdatingLocation]; //[_locationManager startUpdatingLocation]; } @end

如果有任何关于错误的建议,我会欢迎它,我已经失去了一个星期而没有解决它。

BTW,我已经测试了_locationManager变量的各种值,但行为中没有任何chnage

其他信息: 应用程序被授权使用位置服务 应用程序在前台

3 个答案:

答案 0 :(得分:1)

根据我在iOS上基于位置的编程的经验,针对类似问题的一些提示。

  • 如果它适用于模拟器,那么它应该在实际设备上工作 好。
  • 与模拟器不同,实际设备只会在从GPS接收新信息时提供更新。
  • 在很多情况下,您无法在设备上获得足够/必需的更新,例如当您在建筑物(或覆盖区域)时
  • 尝试在开放空间中测试应用程序(GPS在开放空间中工作得更好,而不是房间/房屋/大型建筑物)。

PS。我不知道你搬了多少但只是为了让你知道,移动几步并不能确保你得到一个新的位置更新,尝试在某些车辆(自行车/汽车/公共汽车)上使用它。

答案 1 :(得分:0)

我也遇到了这个问题-最简单的解决方法就是复制目标。然后,您可以删除原始目标。

看来问题出在旧的Xcode项目上,而不是新创建的项目上。

答案 2 :(得分:0)

您可以将此调用添加到您的代码中:

locationManager.stopUpdatingLocation()