Aide à la résolution du premier exercice de "Programmation Cocoa sous Mac Os X"
id0ud0u
Membre
Je débute dans la programmation sous Cocoa et je cherche de l'aide pour résoudre l'exercice du chapitre 5 du livre qui consiste à créer une application qui compte le nombre de caractères présents dans une phrase quelconque.
Je pense qu'au niveau d'Interface Builder il n'y a pas de soucis.
Dans le .h : je déclare de IBOutlet NSTextfield (est-cela qu'il faut-faire?)
Mais mon problème réside plutôt dans le fait que je ne sais pas quelle action utiliser ni quoi mettre dans le .m...
C'est assez laborieux je sais, mais si quelqu'un pouvait m'apporter son aide ce serait gentil
Merci par avance..
Je pense qu'au niveau d'Interface Builder il n'y a pas de soucis.
Dans le .h : je déclare de IBOutlet NSTextfield (est-cela qu'il faut-faire?)
Mais mon problème réside plutôt dans le fait que je ne sais pas quelle action utiliser ni quoi mettre dans le .m...
C'est assez laborieux je sais, mais si quelqu'un pouvait m'apporter son aide ce serait gentil
Merci par avance..
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Si c'est le cas, il suffit simplement de relier (via Interface Builder) ton textField VERS ta classe instanciée (cube bleu) et de choisir "Delegate".
Dans le .m tu rajoutes la notification
Ce petit bout de code sera appelé à chaque fois qu'une modification a lieu à l'intérieur de ton TextField.
Tu rajoutes un simple
Et normalement, le tour est joué.
Autrement, si ce textField te sert à afficher directement le nombre de caractères tapés, et que tu as à côté un NSTextView, tu procèdes de la même manière sauf que le NSTextView sera delegate à la place du TextField, et au lieu du NSLog tu feras [myTextField setIntValue:myTextView string] length;
Dans l'énoncé le livre dit qu'on doit créer un contrôleur avec deux outlets et une action.
Le livre précise aussi les méthodes suivantes :
- (NSString *)stringValue
- (void)setStringValue:(NSString *)aString
- (int)length
+ (NSString *)stringWithFormat:(NSString *),...
Tu tapes par exemple length dans le menu search et tu règles comme indiqué par l'image jointe.
En choisissant length de NSString (comme sur l'image) tu as en dessous la description de ce que cela fait.
Il faut aussi l'IBAction du bouton qui va déclencher la méthode qui va bien dans le .h et sera écrite dans le .m
(IBAction)laMethodeQuiVaBien:(id)sender et la relier au bouton dans IB.
Si c'est fait alors un clic sur le bouton lancera la méthode du .m.
Et si je regarde l'exemple il y a 2 textfields : un pour entrer du texte et un pour afficher ton résultat. Tu dois aussi les déclarer dans .h pour pouvoir les manipuler dans .m.
Dans ta méthode tu connais la valeur de textfield1 via stringValue et tu affiches ton résultat dans textField2 via setStringValue.
Est ce plus clair ?
Quant à l'action je sais qu'il faut la déclarer dans le .h mais j'hésite sur celle à utiliser : est-ce :
- (void)setStringValue:(id)sender ?
Ou bien quelque chose dans le style :
- (IBAction)LeTrucQuiVaBien:(id)sender avec le bon terme à la place de "LeTrucQuiVaBien" mais quoi...
Au temps pour moi, j'aurais dû écrire :
- (IBAction)laMethodeQueTuVasEcrireToiMeme:(id)sender ça aurait été beaucoup plus clair
Si tu as le livre la première partie du chapitre c'est justement ça: tu crées une IBAction (sayIt, stopIt) associée à un bouton de ton interface. Tu refais juste pareil. Pas besoin de passer les valeurs de tes textfields, tu les interrogeras (ou mettras à jour) depuis ta méthode.
Le tout c'est d'imaginer ton objet appController qui a ses propriétés ( elles même des objets le plus souvent ou des actions qui lui sont propres ou vont masquer celles d'un autre objet parent). Ton interface a d'autres objets, tu relies tout ça dans IB via ton .h et ses outlets et tu n'as "plus qu'à " coder les propriétés et actions dans ton .m.
Mon problème actuel est l'affichage de la phrase " ' ' contient n caractères"...
Le nom que tu veux du moment que tu mets les : à chaque paramètre (si tu mets des paramètres) avec un code de retour comme dans le C. Il n'y a rien de bien différent de ce que j'ai compris du C. - (typeRetour)maMethode:(typeArgument)monArgument1. Souvent les arguments sont des objets, donc des instances de Classe et tu types ta fonction avec un pointeur dépointé -(MaClasseRetour *)maMethode:(maClasseArgument *)monArgument.
Aussi tout est objet (sauf les int, double, char* et autres types du C qui n'en sont pas si j'ai bien compris) et peut être typé en id : (id)MaMethode:(id)monArgument
Reprends les exemples du livre (chapitre 2 p20) et adapte les à ton cas mais je crains que tu ne te compliques l'existence là où il ne faut pas. Essayes avec une méthode -(IBAction)pourVoir:(id)sender {NSLog(@sender est: %@", sender);} et tu la relies avec un bouton dans IB. Tu dois voir dans ta console sender est ... (je sais plus un NSButton je crois avec son adresse 0x123).
Si ça marche brode là dessus, regarde la valeur de ton textfield en mettant [textfield stringValue] à la place de sender dans le NSLog..
comment obtenir le nombre de caractères de la phrase saisie ?
Pense objet !
Oh objet string quelle est ta longueur ?
[laString length] et c'est le bonheur ?
[textFieldReponse setStringValue:[NSString stringWithFormat:@longueur %@ caractères",[textFieldEntree length]]]; //tapé dans le navigateur s'il y a des erreurs..
Mais c'est pas de jeu tu devras faire d'autres exercices tout seul ;-)
merci pour ton aide en tout cas