MapKit / Menedżer lokalizacji awarii aplikacji podczas rozładunku widok

głosy
7

I ma błąd, gdzie moja aplikacja zawieszała „EXC_BAD_ACCESS”, kiedy uderzył w tył mojego klucza na pasku nawigacyjnym i widok wyładowane który miał MapKit (MapView) i używany Menedżer gości. Próbowaliśmy kilka dni, aby naprawić błąd i wreszcie wymyślił fix dla każdego, kto jest po drugiej stronie tego problemu:

Dodaj ten kod do swojej dealloc

- (void)dealloc {
    mapView.delegate = nil;
    locationManager.delegate = nil;

    [mapView release];
    [locationManager release];
}
Utwórz 25/03/2010 o 05:08
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
0

Miałem ten jeden też :) I tak, ta poprawka jest rzeczywiście właściwa fix;

- (void)dealloc {
  mapView.delegate = nil;
  locationManager.delegate = nil;

  [mapView release];
  [locationManager release];
}

Co się dzieje za kulisami jest to:

  1. Trafisz backkey. To rozładowuje aw konsekwencji zwalnia kontroler, który przytrzymuje MapView. Jak doszło całkiem prawdopodobne tylko jedno odniesienie do kontrolera zostanie dealloc'ed wtedy.

  2. LocationManager jednak jest całkiem prawdopodobne, nadal odwołuje się gdzieś w wewnętrzne funkcjonowanie geopositioning.

  3. Jeżeli locationManager i / lub MapView teraz wysłać zgłoszenie do ich pełnomocnik, są one po nieprawidłowym wskaźnikiem. Co spowoduje wyjątek EXC_BAD_ACCESS.

Tak: nilling delegatów które wskazują na siebie jest zawsze dobrym pomysłem. I justed Apple będzie chciał dodać tam jakiś automagii.

Odpowiedział 18/02/2012 o 15:04
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more