2012-01-15 111 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; 

,他们当此视图控制器卸载时将停止向其分配的代理发送更新,因此您的应用将停止崩溃。

相关问题