我想制作一个简单的 IOS 6.0 应用程序,每次更改位置时都会在屏幕上显示纬度/经度。 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 View Controller ()
@结束
@implementation ViewController -(无效)viewDidLoad { [ super viewDidLoad]; _locationManager = [[CLLocationManager 分配] 初始化]; _locationManager.delegate = self; _locationManager.distanceFilter = kCLHeadingFilterNone;//每当我们移动 _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]; } @结尾
如果有任何错误的建议,我会欢迎它,我已经失去了一个星期没有解决它。
顺便说一句,我已经测试了 _locationManager 变量的各种值,但没有对行为进行任何更改
附加信息: 应用程序被授权使用定位服务 应用程序在前台
最佳答案
根据我在 iOS 上基于位置的编程的经验,针对类似问题的一些提示。
- 如果它在模拟器上工作,那么它应该在实际设备上工作 好吧。
- 与模拟器不同,实际设备只有在从 GPS 接收到新信息时才会进行更新。
- 在很多情况下,您无法在设备上获得足够/所需的更新,例如当您在建筑物(或覆盖区域)中时
- 尝试在开放空间测试应用(GPS 在开放空间比在房间/房子/大型建筑物中工作得更好)。
附言。我不知道您移动了多少,但只是想让您知道,移动几步并不能确保您会获得新的位置更新,请尝试在某些车辆(自行车/汽车/公共(public)汽车)上使用它。
关于ios - didUpdateLocations 只调用一次然后停止触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25812998/