Pourquoi suis-je après s'écraser MKMapView est libéré si je ne suis plus l'utiliser?

voix
23

J'ai MKMapView. Parfois , après mon contrôleur de vue est rejeté, je vais un EXC_BAD_ACCESS.

Je me suis tourné sur NSSZombieset il semble que le MKMapView« délégué s - mon contrôleur de vue! - est appelé, en dépit de la fois MKMapViewet UIViewControllersous - classe étant libérés. J'ai vérifié, et ma gestion de la mémoire est correcte.

Que se passe-t-il?

Créé 02/02/2010 à 23:10
source utilisateur
Dans d'autres langues...                            


4 réponses

voix
43

Ceci est dû à la façon dont MKMapViewfonctionne. Il y a une opération en attente, si MapKit est retenue le MKMapViewet il n'a pas réellement été désallouée encore. C'est pas en soi un problème. Le problème est que cela continue d' envoyer des messages à votre délégué.

La solution est simple: Dans le cadre du nettoyage de votre contrôleur de vue de définir le délégué de la vue de la carte nil, ce qui empêchera MKMapViewd'envoyer des messages.

Ceci est documenté dans MKMapViewDelegate Protocole de référence :

Avant de libérer un objet MKMapView pour lequel vous avez défini un délégué, souvenez-vous de définir la propriété délégué de cet objet à zéro. Un endroit où vous pouvez faire est dans la méthode dealloc où vous disposez de la vue de la carte.

Edit: Donnez un Oscar upvote aussi bien, juste au-dessous, qui a fourni la citation de documents ici.

Compte tenu de l' ARC, je suggère que cela signifie que vous devez définir le délégué de votre point de vue sur la carte à nilvotre contrôleur de vue de dealloc.

Créé 02/02/2010 à 23:18
source utilisateur

voix
18

OK, voici la confirmation de la réponse. Il est de la doc Apple, mais il manque de MKMapView. Il est seulement trouvé dans la documentation de son protocole délégué:

Avant de libérer un objet MKMapView pour lequel vous avez défini un délégué, souvenez-vous de définir la propriété délégué de cet objet à zéro. Un endroit où vous pouvez faire est dans la méthode dealloc où vous disposez de la vue de la carte.

NOTE: Cela vaut également pour UIWebView.

Je mets le pointeur de délégué MapView à zéro dans la méthode dealloc du délégué, et nos accidents semblent avoir été éliminés.

Créé 20/11/2011 à 22:20
source utilisateur

voix
2

Réglage délégué de la vue de la carte nilne fonctionne pas pour moi. Cependant, la mise showsUserLocation=NOsur le délégué a travaillé en veillant à aucune mise à jour de localisation sont reçues.

Créé 02/09/2011 à 17:57
source utilisateur

voix
0

Le problème, dans mon cas, était la première fois que je lançais application que je ne pas appuyer sur « autoriser » lors de la demande d'autorisation de localisation (accidentellement !!).

Désinstallation application et réinstaller, quand l'invite apparaissent je laisse les autorisations et plus plantage!

Créé 21/05/2015 à 15:11
source utilisateur

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