我有一个带有 MKMapView 的视图控制器,它调用
[self.mapView setRegion:region animated:YES];
它将地图从 A 重新定位到 B。
持有 MKMapView 的视图控制器被设置为委托并在
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
我有一些代码会触发另一个 setRegion:animated: 到 MKMapView,以便地图会自动放大新位置。
如果我 popViewControllerAnimated 一切正常: MKMapView 动画完成平移和缩放后的视图控制器。
但是,当我尝试 popViewControllerAnimated:当前视图控制器时,MKMapView 正在运行它的动画,应用程序崩溃并显示“发送到已释放实例的消息”。
从调试器的外观来看,我认为 MKMapView 正在尝试从弹出和解除分配的委托中调用方法。
所以我尝试了
[self.mapView setDelegate:nil];
self.mapView = nil;
在 viewDidUnload 中没有运气。该应用程序仍然不断崩溃。
我唯一能想到的就是创建一个单独的新委托类并从父视图控制器中保留该类,以便 MKMapView 即使在包含它的视图控制器被释放后也有一个委托可以调用。
为什么会这样?还有其他“干净”的选择吗?