0

我正在使用 CLLocationManager 来获取用户的当前位置。我需要用户的当前位置,因为无论用户在哪里,我都使用 Open Weather Api 来显示天气数据。我的问题是我第一次打开应用程序时,经纬度值是 0、0。但是如果我再次运行应用程序,它就可以正常工作。因此,只有在应用程序首次启动时才使用不正确的 lat 和 long 值。我在 viewDiDLoad 中完成了所有设置,这是代码...

locationManager = [[CLLocationManager alloc] init];
[locationManager requestAlwaysAuthorization];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
    [self->locationManager requestWhenInUseAuthorization];

[locationManager startUpdatingLocation];

我不知道我做错了什么。这与在视图控制器而不是 App Delegate 中获取 lat 和 long 有关吗?

这是我获取位置值的方法:

locationManager.location.coordinate.latitude
locationManager.location.coordinate.longitude
4

2 回答 2

1

您应该检查对象是否有负值,如果是这种情况,请不要使用纬度/经度值horizontalAccuracyCLLocation当您看到纬度/经度值为 0/0 时,GPS 很可能没有锁定位置。

于 2016-04-15T15:22:46.543 回答
1

发生这种情况是因为当您第一次启动应用程序时,位置管理器会询问用户访问当前位置的权限,并且当用户允许时 - 在获取当前位置的过程中花费很少的时间,并且您在完成该过程之前正在访问坐标。

当您再次启动应用程序时,位置管理器会检测到您已经授予权限,因此它会非常快速地为您提供当前位置坐标。

所以解决方案是 - 你必须等到它完成位置更新选项。您可以使用dispatch或者可以使用位置管理器委托方法didUpdateUserLocation或者如果您的 UIViewController 不是初始视图控制器 - 在这种情况下您应该在 AppDelegate 中实现此过程,请在didFinishLaunching中使用您的代码,所以当您将打开您的视图控制器(无论您使用什么导航流程)位置详细信息将在那里,因为同时位置管理器将跟踪您的位置。

希望它会帮助你!

于 2016-04-15T21:36:31.630 回答