Waarom ben ik crashen na MKMapView wordt bevrijd als ik niet langer te gebruiken?

stemmen
23

Ik heb een MKMapView. Soms na mijn ogen controller wordt verworpen, krijg ik een EXC_BAD_ACCESS.

Ik draaide op NSSZombiesen het lijkt erop dat de MKMapView's afgevaardigde - naar mijn mening controller! - wordt genoemd, ondanks zowel de MKMapViewen UIViewControllersubklasse bevrijd. Ik heb gecontroleerd, en mijn memory management correct is.

Wat gebeurd er?

De vraag is gesteld op 02/02/2010 om 23:10
bron van user
In andere talen...                            


4 antwoorden

stemmen
43

Dit is vanwege de manier waarop MKMapViewwerken. Er is een operatie in afwachting van, dus MapKit is behoud van het MKMapViewen het is niet echt nog niet deallocated. Dat is op zichzelf geen probleem. Het probleem is dat het nog steeds berichten stuurt naar uw gemachtigde.

De oplossing is simpel: Als onderdeel van opruimen uw weergave controller delegeren de kaartweergave aan nil, die zal voorkomen dat MKMapViewberichten te versturen naar het.

Dit is gedocumenteerd in MKMapViewDelegate Protocol Reference :

Voor het vrijgeven van een MKMapView object waarvoor u een gemachtigde hebt ingesteld, vergeet niet om afgevaardigde eigenschap van dat object op nihil gesteld. Een plek waar je kunt dit te doen is in de dealloc methode waarbij u beschikt over de kaartweergave.

Edit: Geef Oscar een upvote als goed, net onder, die hier de documentatie citaat verstrekt.

Gezien ARC, stel ik dit betekent dat je moet delegeren kaartweergave is ingesteld om nilnaar uw mening controller dealloc.

antwoordde op 02/02/2010 om 23:18
bron van user

stemmen
18

OK, dit is de bevestiging van het antwoord. Het is in het Apple-doc, maar het ontbreekt in MKMapView. Het is alleen te vinden in het kader van de documentatie voor zijn afgevaardigde protocol:

Voor het vrijgeven van een MKMapView object waarvoor u een gemachtigde hebt ingesteld, vergeet niet om afgevaardigde eigenschap van dat object op nihil gesteld. Een plek waar je kunt dit te doen is in de dealloc methode waarbij u beschikt over de kaartweergave.

LET OP: Dit geldt ook voor UIWebView.

Ik stel de MapView afgevaardigde pointer tot nul in de gemachtigde dealloc methode, en onze crashes lijken te zijn weggenomen.

antwoordde op 20/11/2011 om 22:20
bron van user

stemmen
2

Afgevaardigde de kaartweergave's instellen op nilwerkte niet voor mij. Echter, het instellen van showsUserLocation=NOop de gemachtigde gewerkt door ervoor te zorgen dat er geen locatie-updates worden ontvangen.

antwoordde op 02/09/2011 om 17:57
bron van user

stemmen
0

Het probleem, in mijn geval, was dat de eerste keer dat ik gelanceerd app die ik u niet op "toestaan" wanneer wordt gevraagd voor locatie vergunning (per ongeluk !!).

De installatie van app en opnieuw te installeren, toen prompt ik laat de vergunningen en geen crash meer!

antwoordde op 21/05/2015 om 15:11
bron van user

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