2015-02-24 79 views
1

我有一個splitviewcontroller應用程序,其中主視圖控制器是UITableView和詳細視圖控制器包含MKMapView和單個註釋。當我在UITableView中進行選擇時,輔助視圖會通過單個註釋進入不同的地圖視圖。MKMapView崩潰選擇的註釋,然後立即釋放地圖視圖

當我選擇一個註釋,然後緊接着(出現註釋彈出之前)選擇一個單元格,我收到一個EXC_BAD_ACCESS崩潰。我使用殭屍工具嘗試收集更多信息,並收到此消息。

An Objective-C message was sent to a deallocated 'MKPopoverBasedAnnotationCalloutController' object (zombie) 

我相信這裏的問題是,地圖視圖仍試圖顯示註釋酥料餅,但註釋已釋放。

到目前爲止,我曾嘗試:

•上的dealloc設置MKMapView代表零

注:我沒有使用註釋任何自定義popovers。調用[mapView selectAnnotation:mp animated:YES];並選擇另一個單元時,我也遇到了類似的問題。我通過不調用它來解決這個問題。這顯然不是一個理想的解決方案。

關於如何解決這個問題的任何建議?或者是否有任何關於這是MapKit的問題還是與我的應用程序有關的問題?

由於事先 克里斯

+0

我使用'MkAnnotationV並將該自定義圖像設置爲該視圖。看起來,當我使用MKPinAnnotationView並設置圖像時,崩潰不會發生,但在「MKPinAnnotationView」上設置圖像不能提供正確的功能(引腳在地圖類型更改時仍會顯示) – 2015-02-24 18:27:19

回答

0

我已經能夠始終如一地重現該問題,它確實看起來像蘋果的mapkit代碼中的bug。我已經能夠解決這個問題的唯一方法是創建一個單獨的MKMapView

-(MKMapView*)mapview{ 
    static MKMapView *_mapview = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     _mapview = [[MKMapView alloc] initWithFrame:[UIScreen mainScreen].bounds]; 
     _mapview.showsPointsOfInterest = NO; 
     _mapview.pitchEnabled = NO; 
    }); 
    return _mapview; 
} 

一個重要的注意,當您刪除地圖上不清除註解的是,等到你初始化..

所以不在這裏......

-(void)viewDidDisappear:(BOOL)animated{ 
    [super viewDidDisappear:animated]; 
    [self.mapview removeFromSuperview]; 
    self.mapview.delegate = nil; //AND OR IN DEALLOC 
} 

但在這裏......

- (void)viewDidLoad{ 
    [super viewDidLoad]; 

    [self.view addSubview:self.mapview]; 
    self.mapview.delegate = self; 

    [self.mapview removeAnnotations:[self.mapview annotations]]; 

    //RECREATE THOSE ANNOTATIONS 
} 
相關問題