为什么MKMapView的userLocation属性垃圾...暂时?

Ste*_*son 3 iphone location mapkit

我在IB中定义了一个Map View,它被设置为显示用户位置.

在我的应用程序中,在-viewDidAppear中,我查询self.mapView.userLocation.location.coordinate并返回疯狂的值,例如:

纬度:4.8194501961644877e-49
经度:2.2993313035571993e-59

但是,下次调用-viewDidAppear时(在我简单地移动到另一个选项卡式视图然后再返回到此选项卡之后),userLocation属性将保留当前位置的正确值.

似乎在我的初始调用时,userLocation属性尚未初始化,但是尽管已经阅读了Apple的文档,但我看不出有任何警告,它表示此属性仅在执行xxx后才有效.

userLocation有效使用之前是否有必要发生的事情,或者我应该只使用CLLocationManager来代替它吗?

在此先感谢您的帮助.

可悲的是,托马斯的建议并没有帮助.我发现的是:

如果showsUserLocation是NO,那么用户位置永远不会正确设置和-MapView:didUpdateUserLocation:不会被调用,所以我从来没有得到一个合理的位置值.

因此,要获取用户的位置,我必须将showsUserLocation设置为YES,然后这意味着在将所有注释添加到视图中后(不包括用户的位置),然后我计算所需的跨度以包含它们并显示它们一切都在正确的缩放级别.在我这样做之后,视图会向侧面跳跃,因为Map View会自动将用户的位置显示为蓝色斑点!因为它从未包含在注释中以计算缩放级别,所以我无法将其合并到我的计算中.Aaargh!

请注意,当showsUserLocation为YES时,则会调用-MapView:didUpdateUserLocation:,但只有在我计算了我的注释的所有坐标之后才会调用,而不是之前!

Tho*_*son 5

我假设它还没有找到用户位置 - 它必须解决这个问题,可能需要一段时间.

而不是在使用它时viewDidLoad使用THIS委托方法:

- (void)mapView:(MKMapView *)myMapView didUpdateUserLocation:(MKUserLocation *)userLocation;

您需要将mapview委托设置为self.:)