我有带有 MKUserTrackingModeFollowWithHeading 的 MKMapView。但是有些东西将 userTrackingMode 更改为 MKUserTrackingModeFollow 或 None,所以我实现了,
- (void)mapView:(MKMapView *)mapView didChangeUserTrackingMode:(MKUserTrackingMode)mode animated:(BOOL)animated
{
if ([CLLocationManager locationServicesEnabled]) {
if ([CLLocationManager headingAvailable]) {
[self.myMapView setUserTrackingMode:MKUserTrackingModeFollowWithHeading animated:NO];
}else{
[self.myMapView setUserTrackingMode:MKUserTrackingModeFollow animated:NO];
}
}else{
[self.myMapView setUserTrackingMode:MKUserTrackingModeNone animated:NO];
}
}
Run Code Online (Sandbox Code Playgroud)
一切都很好,但每次我将地图放大到最详细级别时,应用程序都会在上面显示的 setUserTrackingMode:MKUserTrackingModeFollowWithHeading 行中导致 EXC_BAD_ACCESS。
我应该怎么做才能避免崩溃?如果可能,我不想使用 MKUserTrackingBarButtonItem。
mapViewController 的另一部分如下。
- (void)dealloc
{
self.myMapView.delegate = nil;
}
- (void)viewWillDisappear:(BOOL)animated
{
if ([CLLocationManager locationServicesEnabled]) {
self.myMapView.showsUserLocation = NO;
[_locManager stopUpdatingLocation];
if ([CLLocationManager headingAvailable]) {
[_locManager stopUpdatingHeading];
}
}
[super viewWillDisappear:animated];
}
- (void)viewDidAppear:(BOOL)animated
{
if ([CLLocationManager …Run Code Online (Sandbox Code Playgroud) 我正在使用谷歌地图SDK for iOS和CoreLocation框架的区域监控来实现iOS7应用程序.注册监控区域后,调用requestStateForRegion方法但我对设备上的didDetermineState:forRegion方法没有反应(iOS7.0.4,iPhone5S).
它可以接收didUpdateLocation方法,所以我认为委托过程工作正常.在模拟器上,didDetermineState:forRegion方法调用正确.
我该怎么做才能解决这个问题?初始化代码如下.
任何建议表示赞赏 提前致谢.
- (void)viewDidLoad
{
if (locManager == nil ) {
locManager = [CLLocationManager new];
}
locManager.delegate = self;
CLLocationCoordinate2D targetCenter;
targetCenter.latitude = LATITUDE_CENTER;
targetCenter.longitude = LONGITUDE_CENTER;
CLLocationDegrees radius = TARGET_RADIUS;
if ( locManager.maximumRegionMonitoringDistance < TARGET_RADIUS ){
radius = locManager.maximumRegionMonitoringDistance;
}
self.targetRegion = [[CLCircularRegion alloc]
initWithCenter:targetCenter
radius:radius
identifier:@"TargetRegion"];
BOOL monitoringAvailability = [CLLocationManager isMonitoringAvailableForClass:[self.targetRegion class]];
if( monitoringAvailability ) {
if( [CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorized ) {
[locManager startMonitoringForRegion:self.targetRegion];
}
}
[locManager requestStateForRegion:self.targetRegion];
}
- (void)locationManager:(CLLocationManager *)manager …Run Code Online (Sandbox Code Playgroud)