Première réponse :
Losrque t'as créé ton interface, pour la zone de saisie tu as 'drag'n dropper' l'element textView de la palette de IB.
les deux champs nombre de mot et dernier mot sont des NSCell.
Pour le codage de ton Controllet :
Première chose à savoir c'est que ton controller 'controle' ton interface. La première chose c'est que dès que ton interface s'affiche, le nombre de mot est de 0 et le dernier mot à blanc. Pour initialiser tes zones tu dois utiliser la methode awakeFromNib. cette méthode est TOUJOURS appelée par le runtime cocoa avant que l'interface soit affichée.
Dans cette methode tu mettras donc
[afficheNbWord setIntValue:0];
[afficheLastWord setStringValue" "];
Ce sont 2 methodes de l'objet NSCell dans la rubrique 'Setting' and getting cell values' de la doc de Application Kit.
Ensuite ton objet zoneDeSaisie est un NSTextView. Or en consultant la doc de cet objet dans Application Kit, on s'apperçoit que cet objet herite de NSText. Donc toutes les methodes de NSText s'appliquent.
Deuxième chose, il faut voir la zone de saisie comme du texte en continu donc une longue NSString . Donc pour transformer en NSString on consulte les methodes de l'objet NSText et Ô miracle la methode string le fait.
NSString leTextte = [zoneDeSaisie string];
On peut alors considérer qu'une chaine de caractères est un ensemble de mots separés par des blancs.
Or dans la rubrique dividing stings de l'objet NSString (Fondation Kit), j'ai la méthode componentsSeparatedByString qui permet de diviser une chaine en un ensemble (NSArray.
donc ensembleDeMots = [leTexte componentsSeparatedByString" "] ou simplement
ensembleDeMots = [[zoneDeSaisie string] componentsSeparatedByString" "];
Le tour est joué. En effet avec un objet NSArray la methode count me donne le nombre de mots et la methode lastObject me donne le dernier mot.
[afficherLastWord setStringValue:[ensembleDeMots lastObject]];
[afficherNbMots setIntValue:[ensembleDeMots count]];
Il reste une question ou mettre toutes ces instructions?
C'est là où on fait appel à la puissance de Cocoa et de l'objet NSText.
Une chose importante quand tu lis la doc d'une classe Cocoa Objective C, il y a 4 zones importantes.
la zone Adopted Protocols qui regroupe la liste des 'protocoles' auquels la classe se conforme (j'expliquera cela après), la zone des méthodes de la classe, puis la zone Delegate Method types qui est la liste des méthodes appelés par l'objet à des moments précis.
Enfin la zone Notifications qui regroupe l'ensemble des méthodes envoyés par un objet au NotificationCenter pour informer les autres objets du changement de son état. Ces méthodes sont à déclarer par un objet qui doit être déclaré comme délégué d'un objet NSText ou NSTextView.
Donc dans la methode awakeFromNib de counter en plus des 2 methodes d'initialisation décrites plus haut je dois ajouter : [zoneDeSaisie setDelegate:self]; ton objet Counter est le délégé du NSTextView zoneDeSaisie.
la methode du délégué qui m'interesse est textDidChange. Cette methode du délégué est appelée à chaque fois que tu tapes le texte.
En résumé : Counter contient deux methodes
- awakeFromNib pour l'initialisation
- textDidChange pour afficher tes champs à chaque modification de ton texte saisi.
Je t'ai montré comment utiliser la doc Cocoa, puis je t'ai sensibilisé à la notion d délégué qui est en Cocoa hyper importante et qui justement fait de Cocoa quelque chose de très fort.
J'expliquerai plustard les notions de délégué et de Notification si tu veux bien.
Losrque t'as créé ton interface, pour la zone de saisie tu as 'drag'n dropper' l'element textView de la palette de IB.
les deux champs nombre de mot et dernier mot sont des NSCell.
Pour le codage de ton Controllet :
Première chose à savoir c'est que ton controller 'controle' ton interface. La première chose c'est que dès que ton interface s'affiche, le nombre de mot est de 0 et le dernier mot à blanc. Pour initialiser tes zones tu dois utiliser la methode awakeFromNib. cette méthode est TOUJOURS appelée par le runtime cocoa avant que l'interface soit affichée.
Dans cette methode tu mettras donc
[afficheNbWord setIntValue:0];
[afficheLastWord setStringValue" "];
Ce sont 2 methodes de l'objet NSCell dans la rubrique 'Setting' and getting cell values' de la doc de Application Kit.
Ensuite ton objet zoneDeSaisie est un NSTextView. Or en consultant la doc de cet objet dans Application Kit, on s'apperçoit que cet objet herite de NSText. Donc toutes les methodes de NSText s'appliquent.
Deuxième chose, il faut voir la zone de saisie comme du texte en continu donc une longue NSString . Donc pour transformer en NSString on consulte les methodes de l'objet NSText et Ô miracle la methode string le fait.
NSString leTextte = [zoneDeSaisie string];
On peut alors considérer qu'une chaine de caractères est un ensemble de mots separés par des blancs.
Or dans la rubrique dividing stings de l'objet NSString (Fondation Kit), j'ai la méthode componentsSeparatedByString qui permet de diviser une chaine en un ensemble (NSArray.
donc ensembleDeMots = [leTexte componentsSeparatedByString" "] ou simplement
ensembleDeMots = [[zoneDeSaisie string] componentsSeparatedByString" "];
Le tour est joué. En effet avec un objet NSArray la methode count me donne le nombre de mots et la methode lastObject me donne le dernier mot.
[afficherLastWord setStringValue:[ensembleDeMots lastObject]];
[afficherNbMots setIntValue:[ensembleDeMots count]];
Il reste une question ou mettre toutes ces instructions?
C'est là où on fait appel à la puissance de Cocoa et de l'objet NSText.
Une chose importante quand tu lis la doc d'une classe Cocoa Objective C, il y a 4 zones importantes.
la zone Adopted Protocols qui regroupe la liste des 'protocoles' auquels la classe se conforme (j'expliquera cela après), la zone des méthodes de la classe, puis la zone Delegate Method types qui est la liste des méthodes appelés par l'objet à des moments précis.
Enfin la zone Notifications qui regroupe l'ensemble des méthodes envoyés par un objet au NotificationCenter pour informer les autres objets du changement de son état. Ces méthodes sont à déclarer par un objet qui doit être déclaré comme délégué d'un objet NSText ou NSTextView.
Donc dans la methode awakeFromNib de counter en plus des 2 methodes d'initialisation décrites plus haut je dois ajouter : [zoneDeSaisie setDelegate:self]; ton objet Counter est le délégé du NSTextView zoneDeSaisie.
la methode du délégué qui m'interesse est textDidChange. Cette methode du délégué est appelée à chaque fois que tu tapes le texte.
En résumé : Counter contient deux methodes
- awakeFromNib pour l'initialisation
- textDidChange pour afficher tes champs à chaque modification de ton texte saisi.
Je t'ai montré comment utiliser la doc Cocoa, puis je t'ai sensibilisé à la notion d délégué qui est en Cocoa hyper importante et qui justement fait de Cocoa quelque chose de très fort.
J'expliquerai plustard les notions de délégué et de Notification si tu veux bien.