2010-07-19 15 views
2

Je souhaite créer un ChatView exactement comme l'application SMS de l'iPhone (Messages). Je le fais par programme et j'essaie de déplacer le texte avec le clavier. Je veux le faire dans une fonction qui est appelée par UIKeyboardWillShowNotification. Pourriez-vous m'aider à déboguer cette erreur?Comment utiliser UIKeyboardWillShowNotification

En ChatViewController.m, je mis un écouteur pour UIKeyboardWillShowNotification dans la fonction loadview, et je mis auto en tant que délégué de textView, mais il se bloque, en disant: Mettre fin application en raison d'une exception non interceptée « NSInvalidArgumentException », raison: « * ** - [ChatViewController keyboardWillShow]: sélecteur non reconnu envoyé à l'instance

Mais je définis keyboardWillShow dans ChatViewController.m Pourquoi ne trouve-t-il pas cette fonction?

Voici les fichiers importants:

http://github.com/acani/acani-chat/blob/master/Lovers/Classes/ChatViewController.h http://github.com/acani/acani-chat/blob/master/Lovers/Classes/ChatViewController.m

Je commentais les auditeurs afin qu'il ne tombe pas en panne.

Ne hésitez pas à git clone [email protected]: acani/acani-chat.git

Merci!

+0

Github n'est plus là? –

Répondre

2

Les lignes 120 et 121 que vous avez commentées, mais je suppose qu'elles ne sont pas censées l'être puisqu'il n'y a pas d'autres références à l'abonnement aux notifications, ont un problème lorsque vous passez le sélecteur. Les deux points (:) dans les noms de messages Objective-C font partie du nom eux-mêmes. Par conséquent, il vous manque un deux-points au sélecteur que vous transmettez. Corrigez cela, et cela vous débarrassera de votre erreur.

De même, vous devriez appeler removeObserver: lorsque votre vue disparaît (viewDidUnload).

+1

Pour clarifier, vous voulez dire '@selector (keyboardWillShow:)' au lieu de '@selector (keyboardWillShow)' (et de même pour s/Show/Hide /). Je recommande fortement d'utiliser '[[NSNotificationCenter defaultCenter] removeObserver: self]' dans dealloc si la classe s'enregistre pour les notifications. –

+1

S'il s'enregistre pour la notification dans -viewDidLoad, l'avoir seulement dans -dealloc est un peu moot; puisqu'il pourrait, par exemple, aller à un autre point de vue, et revenir à cela sans qu'il soit désaffecté. -viewDidUnload est un meilleur endroit pour cela. Et je suis conscient de ce que je voulais dire, je ne lui ai pas donné la réponse parce que je sentais que l'explication était meilleure. – jer

+0

Merci les gars! Cela l'a réparé! Duh ... le sommeil est bon. – ma11hew28