【发布时间】:2012-10-14 21:43:21
【问题描述】:
我设置了mapView.delegate等
一切都很好,但是当我离开时,在我恢复我的应用程序几分钟后,它就退出了。
控制台给了我这个,但我无法修复它:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'Invalid Region <center:-180.00000000, -180.00000000 span:+0.09000000, +0.09000000>'
userLocation 更新后在didUpdateUserLocation 方法中发送setRegion
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
[mapView removeAnnotations: [mapView annotations]];
for (TOJSearchItem *searchItem in _searchItems) {
TOJPlaceRequest *request = [TOJPlaceRequest new];
[request execute:SERVER_URL coordinate:userLocation.coordinate searchItem:searchItem delegate:self];
}
MKCoordinateRegion region = {{userLocation.coordinate.latitude , userLocation.coordinate.longitude}, {0.09f , 0.09f}};
[mapView setRegion:region animated: YES];
}
提出请求
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
if (_lastLocation != nil) {
CLLocationDistance meters = [newLocation distanceFromLocation:_lastLocation];
if (meters < DISTANCE_MINI) {
// CALCUL tout les points par rapport a current location
// NSLog(@"%f, %f", newLocation.coordinate.latitude, newLocation.coordinate.longitude);
} else {
for (TOJSearchItem *searchItem in _searchItems) {
TOJPlaceRequest *request = [TOJPlaceRequest new];
[request execute:SERVER_URL coordinate:newLocation.coordinate searchItem:searchItem delegate:self];
}
MKCoordinateRegion region = {{newLocation.coordinate.latitude , newLocation.coordinate.longitude}, {0.09f , 0.09f}};
[_mapView setRegion: region animated: YES];
NSLog(@"reconnection");
}
}
_lastLocation = [[CLLocation alloc] initWithLatitude:newLocation.coordinate.latitude longitude:newLocation.coordinate.longitude];
}
点击注释后重置区域
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
if ([view class] == TOJClusterPushPinView.class) {
TOJClusterPushPinView *clusterPushPinView = (TOJClusterPushPinView *)view;
CLLocationCoordinate2D topLeftCoordinate;
topLeftCoordinate.latitude = -90;
topLeftCoordinate.longitude = 180;
CLLocationCoordinate2D bottomRightCoordinate;
bottomRightCoordinate.latitude = 90;
bottomRightCoordinate.longitude = -180;
for (TOJPushPin *pushPin in clusterPushPinView.clusterPushPin.pushPins) {
topLeftCoordinate.longitude = fmin(topLeftCoordinate.longitude, pushPin.coordinate.longitude);
topLeftCoordinate.latitude = fmax(topLeftCoordinate.latitude, pushPin.coordinate.latitude);
bottomRightCoordinate.longitude = fmax(bottomRightCoordinate.longitude, pushPin.coordinate.longitude);
bottomRightCoordinate.latitude = fmin(bottomRightCoordinate.latitude, pushPin.coordinate.latitude);
}
MKCoordinateRegion region;
region.center.latitude = topLeftCoordinate.latitude - (topLeftCoordinate.latitude - bottomRightCoordinate.latitude) * 0.5;
region.center.longitude = topLeftCoordinate.longitude + (bottomRightCoordinate.longitude - topLeftCoordinate.longitude) * 0.5;
region.span.latitudeDelta = fabs(topLeftCoordinate.latitude - bottomRightCoordinate.latitude) * 2.0; // Add a little extra space on the sides
region.span.longitudeDelta = fabs(bottomRightCoordinate.longitude - topLeftCoordinate.longitude) * 2.0; // Add a little extra space on the sides
region = [mapView regionThatFits:region];
[mapView setRegion:region animated:YES];
}
}
【问题讨论】:
-
“当我离开时”究竟是什么意思(pop vc,dismiss vc,other)?显示调用 setRegion 的代码。
-
当我切换应用程序(无论是什么应用程序)并返回此应用程序时,它会退出并在控制台上向我发送错误
-
尝试应用this question 的建议。另请参阅 ng32rg 对该问题的回答。在您的情况下,最有用的检查可能是
if (!CLLocationCoordinate2DIsValid(center))。
标签: iphone ios5 mapkit userlocation