MapKit / Location Manager blocca app quando scarico vista

voti
7

Mi ha un bug in cui la mia domanda è schiantato EXC_BAD_ACCESS quando ho colpito la chiave indietro sulla mia barra di navigazione e la vista scaricato che aveva un MapKit (MapView) e utilizzato il Location Manager. Provato per giorni per correggere il bug e, infine, si avvicinò con una soluzione per tutti coloro che si imbatte in questo problema:

Aggiungere il codice al tuo dealloc

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

    [mapView release];
    [locationManager release];
}
È pubblicato 25/03/2010 alle 05:08
fonte dall'utente
In altre lingue...                            


1 risposte

voti
0

Ho avuto anche questo, :) E, sì, questa correzione è in realtà una correzione adeguata;

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

  [mapView release];
  [locationManager release];
}

Quello che succede dietro le quinte è questo:

  1. Hai colpito il backkey. Questo scarica e di conseguenza rilascia il controller che detiene il MapView. Come c'è stato molto probabilmente solo un unico riferimento al controller sarà dealloc'ed poi.

  2. Il locationManager, tuttavia, è abbastanza probabile che ancora riferimento da qualche parte il funzionamento interno di geopositioning.

  3. Se la locationManager e / o MapView invia una notifica alle rispettive delegato, stanno seguendo un puntatore non valido. Che si tradurrà in un'eccezione EXC_BAD_ACCESS.

Sì: nilling delegati che puntano a sé è sempre una buona idea. Ho voluto justed Apple potrebbe aggiungere un po 'automagic lì.

Risposto il 18/02/2012 a 15:04
fonte dall'utente

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