2012-01-15 103 views

回答

1

您需要將地圖視圖的delegate屬性設置爲-viewDidUnload:中的nil。發生這種崩潰的原因是地圖視圖試圖將其視爲委託,您的視圖控制器,但一旦它從堆棧中彈出,它就已經被釋放。

蘋果甚至在MKMapViewDelegate Protocol Reference中提到了這一點。

之前釋放您已設置了 委託的MKMapView對象,記得給該對象的delegate屬性設置爲nil。一個 你可以做的這個地方是在-dealloc方法你在哪裏處置 地圖視圖。

他們建議在-dealloc nilling的delegate,但由於ARC的,-viewDidUnload是最好的選擇前進。

- (void)viewDidUnload 
{ 
    self.mapView.delegate = nil; 
    self.locationManager.delegate = nil; 
    [super viewDidUnload]; 
} 
+0

嘎!誰是第一個?哈哈:) – 2012-01-15 20:37:34

+0

我想你是... – 2012-01-15 20:51:38

+0

viewDidUnload現已棄用 – dwery 2013-01-08 17:44:05

0

這是使用接收委託調用的對象時的常見問題。問題是,在視圖控制器被釋放後,它仍然接收來自它的一個對象的調用,就像錯誤信息所說的那樣。你需要重寫你的視圖控制器的viewDidUnload方法(更不用說dealloc的一些存儲管理),並在其中你需要把這樣的:這些對象的委託設置爲nil,

yourMapView.delegate = nil; 
yourLocationManager.delegate = nil; 

,他們當此視圖控制器卸載時將停止向其分配的代理髮送更新,因此您的應用將停止崩潰。

相關問題