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