【问题标题】:didUpdateLocations called only once and then stops firingdidUpdateLocations 只调用一次然后停止触发
【发布时间】:2014-09-12 16:43:23
【问题描述】:

我想制作一个简单的 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 ViewController ()

@结束

@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

如果有任何关于哪里出了问题的建议,我会很欢迎,我已经失去了一个星期没有解决它。

顺便说一句,我已经测试了 _locationManager 变量的各种值,但行为中没有任何变化

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

【问题讨论】:

  • 一件事 - 将 kCLHeadingFilterNone 更改为 kCLDistanceFilterNone
  • 很遗憾没有成功。
  • &lt;CLLocationManagerDelegate&gt; 添加到您的班级。而且,这就是视图控制器中的所有代码吗?如果没有,请全部添加。
  • 我在 .h 处添加了委托,但没有任何效果。是的,这就是视图控制器中的所有代码。我尽可能简单地重现错误。可能是硬件错误?我可能会尝试在另一部 iPhone 上检查它

标签: ios objective-c iphone core-location


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的信息。看起来,GPS 可以工作,但没有我想要的那么频繁。当然,在房间里测试也无济于事。我决定绕过这个问题,在需要时停止/启动位置更新。
【解决方案2】:

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

似乎问题出现在较旧的 Xcode 项目中,而不是新创建的项目。

【讨论】:

    【解决方案3】:

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

    locationManager.stopUpdatingLocation()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-16
      • 2022-01-14
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多