Mam kontroler widoku z krytym MKMapView że nazywaMKMapView awarii aplikacji, gdy kontroler widoku pojawiło
[self.mapView setRegion:region animated:YES];
która zmieniła położenie mapę z punktu A do B.
Sterownik widok, który posiada MKMapView jest ustawiona jako delegat aw
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
mam jakiś kod, który wywoła kolejną setRegion: animowane: do MKMapView tak, że mapa będzie powiększać się na nowej pozycji automatycznie.
Wszystko działa dobrze, jeśli popViewControllerAnimated: kontroler widoku PO animacji MKMapView odbywa się panoramowanie i powiększanie.
Jednak, gdy próbuję popViewControllerAnimated: bieżący kontroler widoku WHILE, gdy MKMapView jest uruchomiony animacji, aplikacja zawiesza się z "wiadomość wysłana do zwolnionej instancji".
Z wyglądu debuggera, myślę, że MKMapView próbuje wywołać metodę ze zdeponowanego i zwolnionego delegata.
Więc próbowałem
[self.mapView setDelegate:nil];
self.mapView = nil;
w viewDidUnload bez powodzenia. Aplikacja nadal ulega awarii. Jedyną rzeczą, o której mogłem myśleć było stworzenie oddzielnej nowej klasy delegatów i zachowanie tej klasy z nadrzędnego kontrolera widoku, tak aby MKMapView miał delegata do wywoływania, nawet gdy kontroler widoku, który go zawiera, został zwolniony.
Dlaczego tak się dzieje? Czy są jakieś inne "czyste" opcje?
To jest interesujące. Nasza aplikacja jest okaleczana przez kłopotliwe awarie, które występują, gdy MKMapView wywołuje delegata, aby uzyskać widok na adnotację. Problem polega na tym, że w tym punkcie nie ma już MKMapView; albo nie powinno być. Kontroler, który go zawierał, już dawno został złamany. Ciekawe, czy to ten sam problem. – Oscar
Wygląda na ten sam problem: http://stackoverflow.com/questions/2188098/why-am-i-crashing-after-mkmapview-is-freed-if-im-no-longer-using-it – Oscar