【问题标题】:MKMapView userLocation return coordinates 0.0;0.0 on app's first launchMKMapView userLocation 在应用程序首次启动时返回坐标 0.0;0.0
【发布时间】:2013-03-29 04:54:39
【问题描述】:

我目前正在开发一个使用 MKMapView 控件的应用程序。假设通过蓝点显示用户的位置(如地图应用程序),但是当应用程序首次安装在设备上然后启动时,您会提示要求用户授权,但一旦接受,用户的地图上不显示位置,返回的坐标为 0.0 ; 0.0.

然后,我关闭应用程序,将其从多任务处理中移除并重新启动,位置显示正确并返回正确的坐标。

我还使用 CoreLocation 来计算两点之间的距离并获取航向,并为提示设置了一条自定义消息,即显示应用程序的两次全新安装中的一个(我想知道为什么),我并不真正关心最后一个问题,但了解这个细节可能会有所帮助。

我应该怎么做才能在应用首次启动时显示蓝色?

此致,

最大

【问题讨论】:

  • 更新用户位置可能需要一些时间。它使用核心位置来更新用户的当前位置。这可能会调用 -[CLLocationManager startUpdatingLocation] 或一些类似的方法来更新当前位置。这些方法立即返回并设置回调,以便在找到位置时调用它。要停止蓝色,请设置一些选择器在一定延迟后调用。
  • 嗯,我也是这么想的,除了我放了一个小时,没有任何改变,我在iOS 6上尝试了3GS同样的问题,但在模拟器上运行良好。
  • 检查应用程序的位置更新是否在设置中被禁用。否则,它应该很简单,根本不需要编码。只需在情节提要中拖动地图视图并检查显示用户位置选项即可。
  • 现在我意识到了。似乎这是某种错误。我想您必须将委托设置为地图,并在收到 didUpdateLocation 委托时自己添加注释。否则,使用核心位置更新位置,然后添加注释。
  • 好吧,这似乎也是唯一的方法,CoreLocation 正在返回给我很好的数据,所以我将尝试将其实现为仅在首次启动时替代 MKMapCiew ShowUserLocation,我唯一关心的是看看标题会发生什么,因为我使用了“MKUserTrackingModeFollowWithHeading”方法。

标签: objective-c cocoa-touch ios5 mkmapview core-location


【解决方案1】:

是的,iPhone 有时会发生这种情况(不在模拟器中),我也遇到过同样的问题,如果您尝试将地图缩放到给定位置,它会使应用程序崩溃。您可能希望使用以下代码来避免这种情况。这将丢弃无效的 GPS 更新,最终您将开始获取有效数据

if (mapView.userLocation.coordinate.latitude <= -180.0f
    || mapView.userLocation.coordinate.latitude >= 180.0f
    || mapView.userLocation.coordinate.longitude <= -180.0f
    || mapView.userLocation.coordinate.longitude >= 180.0f
    || (mapView.userLocation.coordinate.latitude == 0.0f 
    && mapView.userLocation.coordinate.longitude == 0.0f) ) {

    return; // or something else you may like to do
} 

// rest of the code

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    相关资源
    最近更新 更多