【发布时间】:2011-07-17 00:17:40
【问题描述】:
我正在尝试向地图视图添加注释和覆盖,但它随机崩溃。这是一个 EXC_BAD_ACCESS 错误,但僵尸什么也没告诉我。它说它在 CG::Path::apply_transform(CGAffineTransform const&) 上崩溃。我到处寻找为什么会发生这种情况,但无法确定。
我正在 ib 中创建地图视图,并正确设置了代表和所有内容。它有时会工作,然后随机崩溃。 我正在使用手势识别器来添加注释和覆盖
UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(handleDoubleTap:)];
[doubleTap setNumberOfTapsRequired:2];
[self.mapView addGestureRecognizer:doubleTap];
和
- (void)handleDoubleTap:(UIGestureRecognizer *)gestureRecognizer
{
if (gestureRecognizer.state == UIGestureRecognizerStateRecognized){
CGPoint touchPoint = [gestureRecognizer locationInView:self.mapView];
CLLocationCoordinate2D touchMapCoordinate =
[self.mapView convertPoint:touchPoint toCoordinateFromView:self.mapView];
//add pin where user touched down...
MKPointAnnotation *pa = [[MKPointAnnotation alloc] init];
pa.coordinate = touchMapCoordinate;
//[pa setTitle:@"title"];
[mapView addAnnotation:pa];
MKCircle* circle=[MKCircle circleWithCenterCoordinate:touchMapCoordinate radius:500];
[mapView addOverlay:circle];
}
}
以及每个人的观点:
-(MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id)overlay
{
if ([overlay isKindOfClass:[MKCircle class]]) {
MKCircleView* circleView = [[MKCircleView alloc] initWithOverlay:overlay];
circleView.strokeColor = [UIColor redColor];
circleView.lineWidth = 1.0;
circleView.fillColor = [UIColor blackColor];
circleView.alpha=.5;
return circleView;
}
else
return nil;
}
- (MKAnnotationView *)mapView:(MKMapView *)localmapView viewForAnnotation:(id <MKAnnotation>)annotation
{
if (![annotation isKindOfClass:[MKUserLocation class]]) {
static NSString *AnnotationIdentifier = @"Annotation";
MKPinAnnotationView* pinView = (MKPinAnnotationView *)[localmapView dequeueReusableAnnotationViewWithIdentifier:AnnotationIdentifier];
if (!pinView)
{
pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationIdentifier];
pinView.pinColor = MKPinAnnotationColorRed;
pinView.animatesDrop = YES;
}
else
{
pinView.annotation = annotation;
}
return pinView;
}
return nil;
}
有没有更好的方法通过用户交互向地图添加注释/叠加?我在这段代码中做错了吗?它似乎绘制了大部分圆圈,但随后崩溃......地图视图有什么特殊技巧吗?
【问题讨论】:
-
对于它的价值,我拥有几乎完全相同的代码,并且我正在经历完全相同的间歇性崩溃。它肯定是由 MKMapView addOverlay: 引起的,并且似乎发生在任意时间。它与添加的叠加层数量无关。如果您解决了问题,请在此处添加答案,我也会这样做。
-
1ndivisible 的帖子 (stackoverflow.com/questions/8266950/…) 涵盖了同样的崩溃。它是 5.0 特有的。
-
我想我遇到了同样的错误,但也看到了这条消息:“错误:地址不包含指向目标文件中某个部分的部分”
标签: iphone objective-c mkmapview mkoverlay