【问题标题】:LocationManager inconsistentLocationManager 不一致
【发布时间】:2014-06-14 18:51:18
【问题描述】:

我正在使用核心位置来存储纬度/经度坐标。我在 viewDidLoad 中有以下代码。

    self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.delegate = self;
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    self.locationManager.distanceFilter = kCLDistanceFilterNone;
    self.locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
    [self.locationManager startUpdatingLocation];

这是我的委托方法。

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
    [self.locationManager stopUpdatingLocation];
    CLLocation* loc = [locations lastObject]; // locations is guaranteed to have at least one object
    float latitude = loc.coordinate.latitude;
    float longitude = loc.coordinate.longitude;
    self.lat = [NSString stringWithFormat:@"%.8f",latitude];
    self.longString = [NSString stringWithFormat:@"%.8f",longitude];
}

我正在使用 GPS 来跟踪这些坐标,但似乎不一致。启动应用程序后,位置服务图标不会经常出现。但是,如果我切换我的 wifi,它会起作用。或者,如果我打开地图应用程序并提示它获取我的当前位置,然后切换到我的应用程序,它就会工作。有时,它会毫无顾忌地工作。如果未显示位置服务图标,则我的纬度/经度值为空。有任何想法吗?提前致谢!

【问题讨论】:

    标签: ios objective-c gps core-location


    【解决方案1】:

    问题在于,当第一次更新到达时,您会立即停止更新位置。这就像快速打开和关闭电灯开关,以至于灯泡没有时间开始发光。所有传感器都需要时间和多次更新才能预热并获得不错的修复,尤其是 GPS。您需要允许足够的更新到达,直到您确实有一个位置(并且您可能想要检查准确性以确保它是一个相当准确的位置)。

    【讨论】:

    • 这里的代码向您展示了如何继续尝试足够长的时间以获得良好的位置值,否则会在合理的时间后超时:github.com/mattneub/Programming-iOS-Book-Examples/blob/master/…
    • 嗯...即使在实现了该代码之后,我仍然遇到同样的问题。此外,“这花费了太长时间”的 NSlog 没有出现,所以我不确定它是否能到达代表。就好像我需要通过 imaps 打开 GPS 才能让它工作。
    • 我的示例是可下载的,并且是一个完整的工作项目。试一试。
    • 我已经将它复制并粘贴到我已有的代码中,但仍然不一致。
    • 您返回的第一个位置通常是保存的 缓存 位置,可能是几分钟或几小时前的位置。您需要检查位置的时间戳和准确性,直到找到合适的位置。
    猜你喜欢
    • 2014-04-03
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多