我正在尝试使用此 viewDidLoad 方法获取用户当前的纬度和经度。生成的地图正确指示当前位置,但 NSLog 始终显示:

2009-09-19 16:45:29.765 Mapper[671:207] user latitude = 0.000000
2009-09-19 16:45:29.772 Mapper[671:207] user longitude = 0.000000

有人知道我在这里缺少什么吗?在此先感谢您的帮助!

- (void)viewDidLoad {
    [super viewDidLoad];
    [mapView setMapType:MKMapTypeStandard];
    [mapView setZoomEnabled:YES];
    [mapView setScrollEnabled:YES];
    [mapView setShowsUserLocation:YES];

    CLLocation *userLoc = mapView.userLocation.location;
    CLLocationCoordinate2D userCoordinate = userLoc.coordinate;

    NSLog(@"user latitude = %f",userCoordinate.latitude);
    NSLog(@"user longitude = %f",userCoordinate.longitude);
}
有帮助吗?

解决方案

在地图不会尝试获取用户的位置,直到它的实际显示,据我所知。这方面的一个很好的测试,当你得到的对话框,询问你是否确定了该应用获取用户的位置?在我的经验,一直拿出地图在屏幕上显示之后。

要解决这个问题,如果你必须在启动时的位置,最好的办法,是落实经典的核心位置处理程序代码,并开始从那个位置。您可以停止接收从那里更新一次地图启动并从那里得到进一步的修改(但如果你需要不断地更新你最好只是用标准核心位置的更新是一致的。如果你想想看,当你有“显示用户位置”,在您的应用此地图还使用核心位置的启用是基本上没有,因为GPS无论如何都会被解雇了的全部时间。

其他提示

如果您尝试获取用户坐标在viewDidLoad中()方法,它总会给0,0的结果,因为它尚未初始化。

您应该看一看“我在哪里”的示例代码形式苹果网站。它说明了你所需要的。 您需要使用 CLLocationManager 类。您还需要方法

*-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation*

这个方法会自动每当用户的位置被更新时被调用。如果你正在使用模拟器,那么这个方法将只调用一次,它会返回一些默认的坐标。

希望它能帮助。

从文档开始 CL位置, ,如果水平精度或垂直精度为负值,则表示找不到值。我怀疑这就是这里发生的事情。请记住,如果您只看一次,它可能会在提高准确性结果之前为您提供最后已知的大致位置。

水平精度坐标的纬度和经度识别圆的中心,该值表示该圆的半径。负值表明坐标的纬度和经度无效。

您应该从CoreLocation而不是MapKit坐标。 MapView类将显示用户所在位置后,实际上得到的当前位置。被确定的位置之前,纬度和经度都被设置为0。3

您应该创建一个CLLocationManager instace,设置委托。当位置被确定,你将被通知。

肯德尔所说,的MKMapView不具有用户的位置,直到它完成加载和viewDidLoad方法通常是太早请求它。比使用CoreLocation简单的方法是实现MKMapViewDelegate方法 -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation。它将只要它坐落给你的用户的位置,而不必应对CLLocationManager。

此答案介绍如何设置与用户位置的地图视图:

方法文档初始化的MKMapView与给定用户的位置?

尝试此

CLLocation *userLoc = mapView.userLocation.location;
CLLocationCoordinate2D userCoordinate = userLoc.coordinate;

NSLog(@"user latitude = %f",userCoordinate.latitude);
NSLog(@"user longitude = %f",userCoordinate.longitude);

ViewdidAppear:或致电延迟之后执行seletor

添加到您的viewDidLoad节

mapView.showsUserLocation = YES;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top