De ce sunt crashing după MKMapView este eliberat, dacă eu nu o mai folosesc?

voturi
23

Am o MKMapView. Uneori , după controler meu de vedere este respinsă, voi primi o EXC_BAD_ACCESS.

Am pornit NSSZombiesși se pare că MKMapViewe delegatului - controler meu de vedere! - este numit, în ciuda atât MKMapViewși UIViewControllersubclasa fiind Freed. Am verificat, și de gestionare a mea de memorie este corectă.

Ce se întâmplă?

Întrebat 02/02/2010 la 23:10
sursa de către utilizator
În alte limbi...                            


4 răspunsuri

voturi
43

Acest lucru este din cauza modului în care MKMapViewlucrările. Există o operațiune în așteptare, deci MapKit prezintă păstrarea MKMapViewși nu a fost încă de fapt deallocated. Acest lucru nu este în sine o problemă. Problema este că este încă trimiterea de mesaje către delegatul.

Soluție este simplu: Ca parte a curățării controlerului de vedere este setat delegat vizualizarea hărții la nilcare va împiedica de MKMapViewla trimiterea mesajelor către acesta.

Acest lucru este documentat în MKMapViewDelegate Protocolul de referință :

Înainte de a elibera un obiect MKMapView pentru care ați stabilit un delegat, nu uitați să setați proprietatea delegat acel obiect la zero. Un loc pe care îl puteți face acest lucru este în metoda dealloc în cazul în care vă aruncați vizualizarea hărții.

Editare: Dă Oscar un upvote, precum și, chiar mai jos, care a furnizat documentația citat aici.

Având în vedere ARC, vă sugerez acest lucru înseamnă că ar trebui să setați delegatului vizualizare hartă a nilîn vedere controlerul lui dealloc.

Publicat 02/02/2010 la 23:18
sursa de către utilizator

voturi
18

OK, acest lucru este confirmarea răspunsului. Este din doc Apple, dar lipsește din MKMapView. Se găsește numai în conformitate cu documentația pentru protocolul său delegat:

Înainte de a elibera un obiect MKMapView pentru care ați stabilit un delegat, nu uitați să setați proprietatea delegat acel obiect la zero. Un loc pe care îl puteți face acest lucru este în metoda dealloc în cazul în care vă aruncați vizualizarea hărții.

NOTA: Acest lucru este valabil și pentru UIWebView.

Am stabilit indicatorul delegatul MapView la zero în metoda dealloc delegatului, iar accidentele noastre par să fi fost eliminate.

Publicat 20/11/2011 la 22:20
sursa de către utilizator

voturi
2

Setarea delegat vizualizarea hărții de a nilnu a funcționat pentru mine. Cu toate acestea, stabilirea showsUserLocation=NOpe delegatul a lucrat asigurându - vă că nu există actualizări de localizare sunt primite.

Publicat 02/09/2011 la 17:57
sursa de către utilizator

voturi
0

Problema, în cazul meu, a fost că prima dată când am lansat aplicația nu apăsați „permite“, atunci când a determinat autorizarea de locație (accidental !!).

Dezinstalarea aplicației și re-instalarea acesteia, atunci când apar prompt de Permit autorizațiile și nu mai accident!

Publicat 21/05/2015 la 15:11
sursa de către utilizator

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