I\'m trying to zoom a map into the user\'s current location once the view loads, but I\'m getting the error \"** * Terminating app due to uncaught exception \'NSInvalidA
did you set showsUserLocation = YES? MKMapView won't update the location if it is set to NO. So make sure of that.
It is very likely that the MKMapView object doesn't have the user location yet. To do right, you should adopt MKMapViewDelegate protocol and implement mapView:didUpdateUserLocation:
map.delegate = self;
...
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
MKCoordinateRegion mapRegion;
mapRegion.center = mapView.userLocation.coordinate;
mapRegion.span.latitudeDelta = 0.2;
mapRegion.span.longitudeDelta = 0.2;
[mapView setRegion:mapRegion animated: YES];
}
Check out the method setUserTrackingMode of MKMapView. Probably the easiest way of tracking the user's location on a MKMapView is
[self.mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];
That way you also don't need to be a MKMapViewDelegate. The possible modes are:
MKUserTrackingModeNone = 0, // the user's location is not followed
MKUserTrackingModeFollow, // the map follows the user's location
MKUserTrackingModeFollowWithHeading, // the map follows the user's location and heading
As with Deepak's answer, except you could set the span more elegantly:
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation {
MKCoordinateRegion mapRegion;
mapRegion.center = map.userLocation.coordinate;
mapRegion.span = MKCoordinateSpanMake(0.2, 0.2);
[map setRegion:mapRegion animated: YES];
}
......
MKCoordinateRegion region =mapView.region;
region.center.latitude = currentLocation.latitude ;
region.center.longitude = currentLocation.longitude;
region.span.longitudeDelta /= 1000.0;
region.span.latitudeDelta /= 1000.0;
[mapView setRegion:region animated:YES];
[mapView regionThatFits:region];