用MKMapView显示当前用户位置?

我试图通过设置MKMapView的属性,即setShowsUserLocationYES来显示用户的当前位置。 默认情况下,当应用程序开始更新用户位置时,会在iPhone屏幕的左上angular出现一个箭头。但是在显示当前位置之后,箭头应该消失,但是只要应用程序正在运行,它仍然存在,这意味着应用程序仍然是在后台更新位置? 所以我如何停止更新当前位置? 我已经实现了被立即调用的代理

如果地图可见并且showUserLocation设置为YES,则它将在后台继续更新。

当视图消失或应用程序转到后台时,您需要取消设置。 最好的办法可能是注册你的viewController通知UIApplicationDidEnterBackgroundNotificationUIApplicationDidBecomeActiveNotification

 - (void)viewDidLoad{ [super viewDidLoad]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appToBackground) name:UIApplicationDidEnterBackgroundNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appReturnsActive) name:UIApplicationDidBecomeActiveNotification object:nil]; } 

然后在此通知所调用的方法中,更改有关userLocation的地图视图属性:

 - (void)appToBackground{ [mapview setShowsUserLocation:NO]; } 

 - (void)appReturnsActive{ [mapview setShowsUserLocation:YES]; } 

检查这些方法确实是通过在那里设置断点并返回到主屏幕来调用的。

我同意迈克尔Kernahan,我很确定在MKMapView内有一个竞争条件。

MKMapView似乎尝试删除userLocationAnnotation (蓝点)一旦它意识到它失去了对位置服务的访问。

然而,这似乎并没有受到保护,如果开发人员也发出[mapView setShowsUserLocation:NO] ,它很可能会因为MKMapView的内部线程试图删除userLocationAnnotation和线程调用setShowsUserLocation:NO

你可以停止更新位置通过发送消息到位置的经理[self.locationManager stopUpdatingLocation];

至于你的情况,你是否试图停止显示用户的位置?