我正在尝试通过将MKMapView
的属性设置为显示用户的当前位置,即setShowsUserLocation
为YES
。默认情况下,当应用程序开始更新用户位置时,iPhone屏幕左上角会出现一个箭头。但是在显示当前位置后,箭头应该消失,但只要应用程序正在运行,它仍然存在,这意味着应用程序仍处于静止状态在后台更新位置?那我怎么能停止更新当前位置?我已经实现了立即调用的委托..
答案 0 :(得分:16)
如果地图可见且showUserLocation设置为YES,则会在后台继续更新。
当视图消失或应用程序转到后台时,您需要取消设置。最好的方法可能是注册viewController以通知UIApplicationDidEnterBackgroundNotification
和UIApplicationDidBecomeActiveNotification
。
- (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];
}
通过在那里设置断点并返回主屏幕,检查是否确实调用了这些方法。
答案 1 :(得分:1)
我同意Michael Kernahan,我很确定MKMapView
内有竞争条件。
MKMapView
似乎一旦意识到它失去了对位置服务的访问权限,就会尝试自行删除userLocationAnnotation
(蓝点)。
但是,这似乎没有受到保护,如果开发人员也发出[mapView setShowsUserLocation:NO]
,很可能会因为MKMapView
内部线程试图删除{{}}之间的竞争而崩溃{1}},以及正在调用userLocationAnnotation
的线程。
答案 2 :(得分:0)
您可以通过向位置的经理[self.locationManager stopUpdatingLocation];
至于您的情况,您是否尝试停止显示用户位置?