У меня есть контроллер представления с MKMapView, который вызывает
[self.mapView setRegion:region animated:YES];
, которая перемещает карту из А в Б.
Контроллер представления, который содержит 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 был делегат для вызова, даже после того, как контроллер представления, который его содержит, освобожден. *
Почему это происходит?
Есть ли другие "чистые" варианты?