MapKit / Manager de locații se blochează atunci când aplicația de descărcare vizualizare

voturi
7

I are un bug în cazul în care cererea mea sa prăbușit „EXC_BAD_ACCESS“, atunci când am lovit cheia înapoi pe bara mea de navigare și vizualizarea descărcate care a avut o MapKit (mapView) și a folosit Managerul de locații. A încercat de zile pentru a rezolva bug-ul și în cele din urmă a venit cu un fix pentru oricine care vine peste această problemă:

Adăugați acest cod în dealloc dvs.

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

    [mapView release];
    [locationManager release];
}
Întrebat 25/03/2010 la 05:08
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
0

Am avut asta prea, :) Si, da, acest remediu este de fapt un fix adecvat;

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

  [mapView release];
  [locationManager release];
}

Ce se întâmplă în spatele scenei este aceasta:

  1. Ai lovit backkey. Acest lucru și, în consecință, evacueazã eliberează controlorul care deține mapView. Deoarece nu a fost destul de probabil, doar o singură referință la regulatorul va fi dealloc'ed atunci.

  2. LocationManager, cu toate acestea, este destul de probabil ca inca se face referire undeva în lucrările interioare ale geopositioning.

  3. În cazul în care locationManager și / sau mapView acum trimite o notificare către delegatul lor respective, acestea urmăresc un pointer invalid. Ceea ce va duce la o excepție EXC_BAD_ACCESS.

Da: nilling delegați care trimit la sine este întotdeauna o idee bună. Am dorit Apple ar reglate adăuga unele automagic acolo.

Publicat 18/02/2012 la 15:04
sursa de către utilizator

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