卸载视图时,MapKit /位置管理器会崩溃应用程序

时间:2010-03-25 04:08:47

标签: crash mapkit cllocationmanager

我有一个错误,当我点击导航栏上的后退键并且卸载了具有MapKit(mapView)并使用位置管理器的视图时,我的应用程序崩溃了“EXC_BAD_ACCESS”。试了好几天来修复这个bug,最后为遇到这个问题的人找到了一个修复程序:

将此代码添加到您的dealloc

- (void)dealloc {
    mapView.delegate = nil;
    locationManager.delegate = nil;

    [mapView release];
    [locationManager release];
}

1 个答案:

答案 0 :(得分:0)

我也有这个,:)而且,是的,这个修复实际上是一个正确的修复;

- (void)dealloc {
  mapView.delegate = nil;
  locationManager.delegate = nil;

  [mapView release];
  [locationManager release];
}

幕后发生的事情是:

  1. 你点击了反键。这将卸载并因此释放保存mapView的控制器。由于很可能只有一个引用控制器,因此它将被解除分配。

  2. 然而,locationManager很可能仍然在地理位置的内部工作中被引用。

  3. 如果locationManager和/或mapView现在向其各自的代理发送通知,则它们跟随无效指针。这将导致EXC_BAD_ACCESS异常。

  4. 是的:指向自我的代表是一个好主意。我希望Apple能在那里增加一些自动化功能。