MapKit / Location Manager bloque l'application lorsque la vue du déchargement

voix
7

I a un bug où ma demande est écrasé « EXC_BAD_ACCESS » quand je frappe la clé de retour sur ma barre de navigation et la vue à vide qui avait une MapKit (Mapview) et utilisé le gestionnaire d'emplacement. J'ai essayé pendant des jours pour corriger le bug et est finalement arrivé à une solution pour toute personne qui vient à travers ce problème:

Ajoutez ce code à votre dealloc

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

    [mapView release];
    [locationManager release];
}
Créé 25/03/2010 à 05:08
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

J'ai eu celui-ci aussi, :) Et oui, ce correctif est en fait une solution appropriée;

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

  [mapView release];
  [locationManager release];
}

Ce qui se passe dans les coulisses est la suivante:

  1. Vous frappez la touche Back. Cette décharge et par conséquent libère le contrôleur qui détient le Mapview. Comme il a été tout à fait probable qu'une seule référence au contrôleur, il sera alors dealloc'ed.

  2. est tout à fait probablement encore référencé cependant, le LocationManager, quelque part dans le fonctionnement interne de géolocalisation.

  3. Si le LocationManager et / ou Mapview maintenant envoyer une notification à leur délégué respectif, ils suivent un pointeur non valide. Ce qui se traduira par une exception EXC_BAD_ACCESS.

Oui: nilling délégués qui pointent vers soi est toujours une bonne idée. Je voulais justed Apple ajouter un peu automagique là.

Créé 18/02/2012 à 15:04
source utilisateur

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