まず第一に、MKMapViewにはユーザーの場所しかありません。いくつかのアクションの後、私はメソッドを呼び出します:
[self mapView:self.mapView didAddAnnotationViews:self.pointersArray];
私のdidAddAnnotationViews
メソッド:
-(void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
{
if (views.count == 1) {
MKAnnotationView *annotationView = [views objectAtIndex:0];
id<MKAnnotation>mp = [annotationView annotation];
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance([mp coordinate], 500, 500);
[mapView setRegion:region animated:YES];
}
else {
[mapView addAnnotations:views];
}
}
ズームを使用しない限り、アプリケーションはクラッシュしません。しかし、ズームを10回以上使用すると(約)、これでエラーが発生したり、場合によってはエラーが発生し[mapView addAnnotations:views];
たりしreturn UIApplicationMain(argc, argv, nil, NSStringFromClass([BIDAppDelegate class]));
ます。エラー- EXC_BAD_ACCESS
。私の問題はありますか?
編集
に変更され[self.mapView setRegion:region animated:YES];
ましたが、メインスレッドでエラーが発生しましたMKNormalizedPointForLayer EXC_BAD_ACCESS
。通常、ズームは機能していますが、ズームを7回以上使用すると、アプリケーションがクラッシュします。ボタンの動作:
- (void)showKantorsOnMap {
if (self.kantorsData.count != self.pointersArray.count) {
NSLog(@"need to wait more");
}
NSMutableArray *toRemove = [[NSMutableArray alloc] init];
for (id annotation in self.mapView.annotations)
if (annotation != self.mapView.userLocation)
[toRemove addObject:annotation];
[self.mapView removeAnnotations:toRemove];
[self.mapView addAnnotations:self.pointersArray];
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(self.mapView.userLocation.coordinate,6500, 6500);
[self.mapView setRegion:region animated:YES];
}
解決策
問題は再帰と呼ばれるdidAddAnnotationViews
方法にありました。[mapView addAnnotations:views];