的MKMapView崩溃的应用时的视图控制器弹出
[self.mapView setRegion:region animated:YES];
其重新定位在地图从A到B
其保持的MKMapView被设置为视图控制器一个的MKMapView视图控制器委托和
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
我有一些代码,会触发另一个setRegion:动画:到的MKMapView如此,地图将自动放大新的位置。
一切工作正常,如果我popViewControllerAnimated:视图控制器后,MKMapView动画完成平移和缩放。
但是,当我尝试popViewControllerAnimated:当前视图控制器WHILE MKMapView运行它的动画时,应用程序崩溃与“消息发送到释放实例”。
从调试器的外观来看,我认为MKMapView试图从弹出和释放的委托调用方法。
所以我在viewDidUnload试图
[self.mapView setDelegate:nil];
self.mapView = nil;
没有运气。该应用程序仍然一直崩溃。
我唯一能想到的就是创建一个单独的新委托类,并从父视图控制器中保留该类,以便MKMapView有一个委托即使在包含它的视图控制器被释放后也可以调用。
这是怎么发生的? 有没有其他的“干净”选项?
好的,这是真正的答案。它来自苹果文档,但它从MKMapView中丢失。只有在其代理协议的文档中才能找到它:
“在释放已设置委托的MKMapView对象之前,请记住将该对象的委托属性设置为nil。一个可以执行此操作的位置在dealloc方法中你在那里处理地图视图。“
注意:这也适用于UIWebView。
我在代理的dealloc方法中将MapView的委托指针设置为nil,并且我们的崩溃似乎已被消除。
这适用于可能比其代表寿命更长的_any_对象。 –
下面的代码很可能asolve您的问题:
-(void) viewWillDisappear:(BOOL)animated
{
self.mapView.delegate = nil;
mapView=Nil;
NSLog(@"viewWillDisappear");
}
你忘了调用viewWillDisappear的超级方法:animated – Neru
我的问题是不是由我的视图控制器
[self.mapView setDelegate设定的MKMapView的委托来解决无:无]。
我不得不在我的RootViewController中对包含MKMapView的UIViewController进行__strong引用。
__strong <#UIViewController#> * vcNewLocation;
这很有趣。我们的应用程序被MKMapView调用委托以获取注释视图时发生的令人困惑的崩溃而瘫痪。问题在于那时没有MKMapView存在;或者不应该有。包含它的控制器早已被弹出。不知道是否是同样的问题。 – Oscar
看起来像这样的问题:http://stackoverflow.com/questions/2188098/why-am-i-crashing-after-mkmapview-is-freed-if-im-no-longer-using-it – Oscar