J'ai le code suivant: donc je mettez des points d'arrêt au début de mais pendant mon application, je téléchargeais à nouveau des données et publier Notification: NsdownloadComplete code>. Et dans ce VC, c'est un travail, mais j'ai retiré ultérieurement en utilisant: p> ViewDidLoad code> méthode, dans ViewDidDisappear code>. Lorsque je lance une application qui va d'abord à ViewDidLoad Code>, après le téléchargement, il est allé sur ViewDidDisappear code>. P> 2013-06-10 14:32:05.646 myApp[9390:c07] addObserver
2013-06-10 14:32:06.780 myApp[9390:c07] removeObserver
3 Réponses :
Le modèle que vous utilisez n'est pas correct. Vous devriez ajouter l'observateur dans ViewDidAppear: code> et supprimez-le dans ViewDidDisappear: code>. P>.
Ou ajouter l'observateur dans ViewWillappear: code>
@ E1985 N'aide pas. Et viewwillappear: n'aide pas aussi
Qu'est-ce que E1985 tente d'exposer est que votre Pour résoudre votre problème, vous devez équilibrer votre problème. Code> addobserver code> et Donc, dans votre cas, Un objet opaque à agir en tant qu'observateur. P>
blockquote> Donc, votre code devrait donc ressembler à quelque chose comme: p> addobserver code> et removeobserver code> Les appels ne sont pas correctement équilibrés. ViewDiDloadLoad Code> est appelé une seule fois après l'initialisation VC, mais ViewDidDisappear code> est appelé chaque fois que le contrôleur de vue est déplacé de l'écran. removeobserver code> appels, soit en les faisant dans ViewDidLoad code> et l'autre dans dealloc code> ou - comme E1985 suggérées - dans ViewDidIDAppear: code> et ViefDidDisappear: code>. p> addobserverforname: Object: Queue: UtilisationBLOCK: code> qui ne vous enregistrez pas auto code> comme observateur (comme addobserver: sélecteur: nom: objet: code> ferait si vous Pass auto code> comme premier argument). p> [[NSNOTIFICATIONCENTER BLATTERCENTER] Supprimerserver: auto]; code> ne fait rien parce que code> n'est pas un observateur. Vous devriez plutôt appeler rememiobserver: code> sur la valeur de retour de addobserverforname: Objet: Queue: UtilisationBLOCK: code>, comme indiqué dans le doc : P>
Je déménage dans la viefDididAppear: et aucun résultat = (
S'il vous plaît expliquer le problème plus clairement que. Qu'est-ce que "ne fonctionne pas"?
J'ajoute l'écran où vous pouvez voir ce bloc appelé après la méthode SupprimerServer.
Outre l'ajout / Supprimer des appels d'observateurs non bien équilibrés, à noter dans les autres réponses, il y a un autre problème.
Votre code pour supprimer l'observateur est faux. Pour un observateur basé sur un bloc, la valeur de retour em> de à la classe. Ensuite, vous ajoutez l'observateur avec p> et retirez-le avec p> addobserver code> doit être donnée en tant qu'argument sur RejeterObserver code>. Donc, vous devriez ajouter une propriété p>
Merci beaucoup de Martin, votre solution fonctionne si bien.
Est-ce que ce code copie et collé? Je viens de me demander parce que votre
ViewDidLoad code> est de seulement 3 lignes et après avoir des déclarations qui ne sont dans aucune méthode. Ce n'est pas valide;)@Has tout fonctionne bien, sauf ma question =)
Désolé, mais ce n'est pas le cas;) l'attelle bouclée après
auto.AcityIndicator.originy = 355.f; code> est faux. Supprimer et vous aurez un code valide;)@Has i Modifier, erreur, désolé
Seulement removeobserver dans Dealloc