【发布时间】:2014-05-08 02:07:36
【问题描述】:
我希望有人可以帮助我解决 iOS 6 上的这个奇怪的崩溃问题。
我正在为 iOS 6 - iOS 7 构建一个应用程序,我正在使用一个 MKMapView 并添加了一个 MKPointAnnotation。我还使用自定义MKAnnotationView 来显示我的图钉和标注。在 iOS 7 上,一切运行良好。然而,iOS 6 我在MKMapView:addAnnotation 上得到了一个EXC_BAD_ACCESS。一切都在viewDidLoad 上完成。
我也测试了 2 个场景。
如果我在添加注释之前设置
MKMapView委托,它会在 iOS 6 上崩溃。
1234563
代码:
-(void)viewDidLoad
{
[super viewDidLoad];
//set delegate
self.mapView.delegate = self;
//lat, long
CGFloat latitude = 40.689249f;
CGFloat longitude = -74.0445f;
//coord, span, region
CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(latitude, longitude);
MKCoordinateSpan span = MKCoordinateSpanMake(0.05f, 0.05f);
MKCoordinateRegion region = MKCoordinateRegionMake(coord, span);
//annotation
MKPointAnnotation annotation = [[MKPointAnnotation alloc] init];
[annotation setTitle:@"title here"];
[annotation setCoordinate:coord];
[self.mapView setRegion:region];
[self.mapView addAnnotation:annotation];//EXC_BAD_ACCESS here (iOS 7 no crash)
}
-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
CAnnotationView *annotationView = (CAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:MKAnnotationViewReuseIdentifier];
if (!annotationView)
annotationView = [[CAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:MKAnnotationViewReuseIdentifier];
return annotationView;
}
好吧,我发现在 iOS 6 中为我的 CAnnotationView 加载自定义笔尖会导致崩溃。如果我注释掉加载包,那么就不会再崩溃了。
那么在 iOS 6 中子类化 MKAnnotationView 时是否不支持 nib?
-(id)initWithAnnotation:(id<MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier];
if (self){
NSArray *bundle = [[NSBundle mainBundle] loadNibNamed:@"CAnnotationView" owner:self options:nil];
self = [bundle firstObject];
}
return self;
}
这是我创建的一个小测试,用于复制崩溃。在 iOS 6 上运行会崩溃,在 iOS 7 上你应该会看到放置在 MKMapView 上的自定义注释。 http://www.levieggert.com/MKMapView/MKMapViewCrashTest.zip
【问题讨论】:
-
显示分配注解的代码。此外,请显示您的 viewForAnnotation 代码。
标签: ios mkmapview exc-bad-access