MKMapView を呼び出すビュー コントローラーがあります。
[self.mapView setRegion:region animated:YES];
マップを A から B に再配置します。
MKMapView を保持するビュー コントローラーがデリゲートとして設定され、
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
別の setRegion:animated: を MKMapView にトリガーするコードがいくつかあり、マップが新しい位置に自動的にズームインします。
popViewControllerAnimated の場合、すべて正常に動作します。MKMapView アニメーションがパンとズームを実行した後のビュー コントローラーです。
ただし、MKMapView がアニメーションを実行している間に popViewControllerAnimated: 現在のビュー コントローラーを実行しようとすると、「割り当て解除されたインスタンスにメッセージが送信されました」というメッセージが表示されてアプリがクラッシュします。
デバッガーの外観から、MKMapView はポップされ、割り当てが解除されたデリゲートからメソッドを呼び出そうとしていると思います。
だから私は試しました
[self.mapView setDelegate:nil];
self.mapView = nil;
viewDidUnload 運が悪い。アプリはまだ一貫してクラッシュします。
私が考えることができる唯一のことは、別の新しいデリゲート クラスを作成し、そのクラスを親ビュー コントローラーから保持して、それを含むビュー コントローラーの割り当てが解除された後でも、MKMapView が呼び出すデリゲートを持つようにすることでした。
なぜこうなった?他に「クリーン」なオプションはありますか?