当我使用popviewcontroller时崩溃与MKMapView

时间:2012-01-15 20:17:34

标签: iphone ios mkmapview mapkit back-button

我的申请表存在问题。

2 个答案:

答案 0 :(得分:1)

您需要将地图视图的delegate属性设置为nil中的-viewDidUnload:。发生此崩溃是因为地图视图试图向其视图控制器发送消息,但是一旦弹出堆栈,它就已经被释放了。

Apple甚至在传递MKMapViewDelegate Protocol Reference时提到了这一点。

  

在发布已为其设置的 MKMapView 对象之前   委托,请记住将该对象的 delegate 属性设置为 nil 。一   您可以执行此操作的地方位于您处理的 -dealloc 方法中   地图视图。

他们建议在delegate中填写-dealloc,但由于ARC,-viewDidUnload是向前发展的最佳选择。

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

答案 1 :(得分:0)

使用接收委托调用的对象时,这是一个常见问题。问题是在取消分配视图控制器之后,它仍会接收来自其中一个对象的调用,如错误消息所示。您需要覆盖视图控制器的viewDidUnload方法(更不用说dealloc用于某些内存管理),在其中您需要输入类似的内容:

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

通过将这些对象的委托设置为nil,当此视图控制器卸载时,它们将停止向其分配的委托发送更新,因此您的应用程序将停止崩溃。