【发布时间】:2011-11-08 07:37:33
【问题描述】:
我有一个带有 MKMapView 的视图控制器,它调用
[self.mapView setRegion:region animated:YES];
将地图从 A 重新定位到 B。
持有 MKMapView 的视图控制器被设置为委托并在
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
我有一些代码会触发另一个 setRegion:animated: 到 MKMapView,以便地图会自动放大新位置。
如果我 popViewControllerAnimated 一切正常:MKMapView 动画完成平移和缩放后的视图控制器。
但是,当我尝试 popViewControllerAnimated: the current view controller WHILE MKMapView 正在运行它的动画时,应用程序崩溃并显示“发送到已释放实例的消息”。
从调试器的外观来看,我认为 MKMapView 正在尝试从弹出和解除分配的委托中调用方法。
所以我尝试了
[self.mapView setDelegate:nil];
self.mapView = nil;
在 viewDidUnload 中没有运气。该应用程序仍然经常崩溃。
我唯一能想到的就是创建一个单独的新委托类并从父视图控制器中保留该类,以便 MKMapView 即使在包含它的视图控制器被释放后也可以调用委托。
为什么会这样? 还有其他“干净”的选择吗?
【问题讨论】:
-
这很有趣。当 MKMapView 调用委托以获取注释视图时发生的莫名其妙的崩溃使我们的应用程序瘫痪。问题是当时不存在 MKMapView;或者不应该。包含它的控制器早已被弹出。不知道是不是同样的问题。
-
看起来和这个问题一样:stackoverflow.com/questions/2188098/…
标签: iphone objective-c ios mkmapview mkmapviewdelegate