Perché sto schiantarsi dopo MKMapView viene liberato se non ho più sto usando?

voti
23

Ho un MKMapView. A volte, dopo il mio controller di vista è respinto, vado a prendere una EXC_BAD_ACCESS.

Ho acceso NSSZombiese sembra che la MKMapView's delegato - il mio controller della vista! - viene chiamato, nonostante sia l' MKMapViewe UIViewControllersottoclasse essere stato liberato. Ho controllato, e la mia gestione della memoria è corretta.

Cosa sta succedendo?

È pubblicato 02/02/2010 alle 23:10
fonte dall'utente
In altre lingue...                            


4 risposte

voti
43

Ciò è dovuto il modo in cui MKMapViewlavori. C'è un'operazione in corso, in modo da MapKit è conservando le MKMapViewe non è in realtà stato ancora deallocato. Che non è di per sé un problema. Il problema è che è ancora l'invio di messaggi al tuo delegato.

La soluzione è semplice: Come parte della pulizia del vostro controller della vista impostata delegato della vista mappa nil, che impedirà MKMapViewdi inviare messaggi ad esso.

Questo è documentato in MKMapViewDelegate Protocollo di riferimento :

Prima di rilasciare un oggetto MKMapView per il quale è stato impostato un delegato, ricordarsi di impostare la proprietà delegato di quell'oggetto a zero. Un posto dove si può fare questo è nel metodo dealloc dove si smaltisce la visualizzazione della mappa.

Edit: Dare Oscar un upvote così, appena al di sotto, che ha fornito la citazione di documentazione qui.

Dato ARC, vi suggerisco questo significa che è necessario impostare delegato del vostro guarda la mappa a nilnel vostro controller della vista di dealloc.

Risposto il 02/02/2010 a 23:18
fonte dall'utente

voti
18

OK, questo è la conferma della risposta. E 'dal documento di Apple, ma che manca da MKMapView. Si trova solo sotto la documentazione per il suo protocollo delegato:

Prima di rilasciare un oggetto MKMapView per il quale è stato impostato un delegato, ricordarsi di impostare la proprietà delegato di quell'oggetto a zero. Un posto dove si può fare questo è nel metodo dealloc dove si smaltisce la visualizzazione della mappa.

NOTA: Questo vale anche per UIWebView.

Ho impostato il puntatore delegato del MapView a zero nel metodo dealloc del delegato, ed i nostri crash sembra di essere stato eliminato.

Risposto il 20/11/2011 a 22:20
fonte dall'utente

voti
2

Impostazione delegato del guarda la mappa per nilnon ha funzionato per me. Tuttavia, l'impostazione showsUserLocation=NOsul delegato lavorato facendo in modo non gli aggiornamenti di posizione vengono ricevuti.

Risposto il 02/09/2011 a 17:57
fonte dall'utente

voti
0

Il problema, nel mio caso, è stata quella prima volta ho lanciato app che non premo "permettere" quando si chiede per l'autorizzazione posizione (per sbaglio !!).

Disinstallare app e reinstallare, quando pronta appaiono permetto le autorizzazioni e non più incidente!

Risposto il 21/05/2015 a 15:11
fonte dall'utente

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