2010-07-16 7 views
1

Je reçois une erreur lors de l'appel de la fonction définie dans setAnimationDidStopSelector lorsque ma vue s'anime lorsque j'enlève la vue et libère l'objet. Je ne suis pas sûr à 100% qu'il s'agit simplement d'une animation UIView en cours de publication et du callback émis par l'animation qui est appelée dans un objet libéré, mais je suppose qu'il s'agit d'un nettoyage nécessaire.Annulation du délégué pour une animation UIView spécifique

Y a-t-il des choses que je devrais faire lorsque je nettoie les UIViews qui peuvent avoir un sélecteur de cible pour leurs animations, c'est-à-dire, en quelque sorte, mettre le délégué à zéro? Si c'est le cas, je ne sais pas comment atteindre cette animation spécifique pour annuler le délégué.

Y a-t-il d'autres causes potentielles évidentes à cet accident? Fondamentalement, je lance l'animation et puis peu de temps après je nettoie et libère la vue animant ainsi que l'objet qui reçoit le rappel.

Répondre

1

probablement pas la solution, mais avez-vous appelé setAnimationDelegate? Il devrait conserver le délégué afin que votre scénario de libération anticipée ne se produise pas.

+0

Merci de nous rappeler qu'il est conservé. En fait, le problème est que je passe de ma scène et nettoie et j'ai en fait une classe Adapter qui est utilisée comme délégué. Cette classe appelle ensuite un écouteur C++ qui gère le rappel. Lorsque je nettoie et libère l'adaptateur obj-c et peu après nettoyez la classe C++, l'adaptateur retenu est appelé avec l'animation stop et le transmet consciencieusement à la classe C++ qui est morte maintenant. J'ai fait fonctionner les choses en réglant mon écouteur de l'adaptateur à zéro lorsque je nettoyais l'objet C++. Pas idéal, mais ça fonctionne. :) – Joey

+0

cela résout alors le mystère, non? vous l'avez fait de sorte que setAnimationDelegate n'a pas "conservé" le délégué C++ effectif. – mvds

Questions connexes