Question sur la syntaxe

CocoaPowrCocoaPowr Membre
août 2009 modifié dans API AppKit #1
Salut les devs ! Je me suis mit au développement Cocoa il y a peu grâce au livre "Programmation Cocoa sous Mac OSX" de Aaron Hillegass. Mais, j'ai un petit soucis concernant son ouvrage. À la page 93 (pour ceux qui ont le livre et qui voudraient jeter un coup d'oeil), aaron nous propose de réaliser une application permettant de compter les caractères qu'on a saisi dans un label. J'ai donc réalisé une jolie interface avec une fenêtre texturée, j'ai crée trois outlets et une fonction, voilà  ma classe :

AppController.h :

//<br />//&nbsp; AppController.h<br />//&nbsp; iStringCalc<br /><br />#import &lt;Foundation/Foundation.h&gt;<br /><br /><br />@interface AppController : NSObject {<br />	<br />	IBOutlet NSButton *countCaractButton;<br />	IBOutlet NSTextField *textSaisie;<br />	IBOutlet NSTextField *textSortie;<br /><br />}<br /><br />- (IBAction)compterCaracteres:(NSButton *)sender;<br /><br />@end<br />


AppController.m :

//<br />//&nbsp; AppController.m<br />//&nbsp; iStringCalc<br /><br /><br />#import &quot;AppController.h&quot;<br /><br /><br />@implementation AppController<br /><br />- (IBAction)compterCaracteres:(NSButton *)sender {<br />	<br />	NSLog(@&quot;Bouton &#39;countCaractButton&#39; enclenché&quot;);	<br />	<br />	<br />}<br /><br />@end<br />


Mais bon, voilà , je suis perdu avec les méthodes proposées par Aaron pour arriver à  mes fins. Il me propose d'utiliser les méthodes :

- (NSString *)stringValue
- (void)setStringValue:(NSString *)aString
- (int)length
+ (NSString *)stringWithFormat:(NSString *), ...

Mais moi, je ne sais pas comment mettre en pratique ce charabia ? Pourriez vous m'expliquer comment me servir de la doc d'Apple également ? J'ai cherché "stringValue" dans la doc d'Apple ainsi que les autres méthodes dans l'espoir de trouver des exemples de code utilisant ces méthodes, mais en vain. Merci d'avance !

Réponses

  • CéroceCéroce Membre, Modérateur
    août 2009 modifié #2
    Dans la doc d'Apple, il faut aller voir la doc de chaque classe, où toutes les méthodes qu'elles implémentent sont décrites.

    Recherche donc plutôt NSString (méthodes -length et -stringWithFormat:) et NSControl (stringValue et setStringValue:)
  • CocoaPowrCocoaPowr Membre
    août 2009 modifié #3
    Merci mais je tombe exactement sur la même chose, par exemple pour length :

    length
    Returns the number of Unicode characters in the receiver.

    - (NSUInteger)length

    Return Value
    The number of Unicode characters in the receiver.

    Discussion
    The number returned includes the individual characters of composed character sequences, so you cannot use this method to determine if a string will be visible when printed or how long it will appear.

    Availability
    Available in Mac OS X v10.0 and later.
    See Also
    – lengthOfBytesUsingEncoding:
    sizeWithAttributes: (NSString Additions)
    Declared In
    NSString.h


    Bref, j'aimerai donc savoir comment me servir de la doc d'Apple ? C'est à  dire comment savoir de quelle manière appliquer une méthode ? Pourriez vous me dire comment utiliser length avec un exemple de code ?
  • tabliertablier Membre
    23:08 modifié #4
    Pour compléter la réponse de Céroce.
    Dans un fichier (.m ou .h) d'un projet ouvert sous xcode, tu écris le mot pour lequel tu veux une explication, puis en maintenant la touche "alt" enfoncée tu double clic sur le mot en question. L'aide doit s'ouvrir automatiquement et te donner la liste des endroits ou ce mot est référencé.
    Si tu utilise la touche "commande" au lieu de "alt", Xcode va ouvrir le fichier ou le mot est défini (très souvent, un fichier .h).
    Après, c'est à  toi de lire, comprendre ou modifier ta recherche.
  • CocoaPowrCocoaPowr Membre
    août 2009 modifié #5
    J'ai l'impression que vous ne comprenez pas vraiment ma question, plus précisément, j'aimerai savoir, avec la doc d'Apple (ou pas), quelle syntaxe faut-il utiliser (prenons l'exemple de length) :

    [monstring:length];
    [monstring length];
    monstring.length

    etc, ?
  • août 2009 modifié #6
    Nan mais là  c'est plus du ressort de la doc Apple.. c'est du ressort de tes connaissances..
    En Objective-C la syntaxe c'est clairement
    <br />[monString faitKekeChoseAvec:ceci];<br />
    


    Faut pas chercher plus loin.
    Avec l'objective-C 2 certes il y a les properties qui sont utilisés comme ceci :
    <br />monString.text = @&quot;salut&quot;;<br />
    

    Mais ça n'est que dans le cas des getter/setter. Lorsque tu veux qu'une variable fasse quelque chose, tu devras utiliser la syntaxe de l'exemple 1.

    Pour être plus concret, il est impossible de faire :
    <br />monString.faitKekeChoseAvec:ceci<br />
    

    Et encore moins
    <br />monString.faitKekChoseAvec = ceci;<br />
    


    Mais franchement arrête d'utiliser la Doc Apple si tu ne sais pas ça.. et va t'acheter "Cocoa programming for Mac OS X" qui est un super bouquin et qui est un bon point de départ avant de se servir uniquement de la doc Apple.
    (C'est pas méchant, c'est juste un bon conseil)

    Edit : Tu peux faire "monString.length" vu que c'est de l'Objective-C 2, et tu peux aussi très bien faire [monString length], les deux sont valables.
  • CocoaPowrCocoaPowr Membre
    août 2009 modifié #7
    Voilà  qui répond à  toutes mes questions, merci beaucoup.
  • zoczoc Membre
    23:08 modifié #8
    dans 1249385637:

    J'ai l'impression que vous ne comprenez pas vraiment ma question, plus précisément, j'aimerai savoir, avec la doc d'Apple (ou pas), quelle syntaxe faut-il utiliser (prenons l'exemple de length) :

    [monstring:length];
    [monstring length];
    monstring.length

    etc, ?


    Vu les questions posées, je pense qu'il faut de toute urgence consulter The Objective-C 2.0 Programming Language avant tout...
  • Philippe49Philippe49 Membre
    août 2009 modifié #9
    D'accord avec EagleLouk et Zoc .

    1) Le titre de ton post serait à  changer, car le problème n'est pas dans l'utilisation de la doc, mais plus sur les bases d'Obj-C. Merci de le faire.

    2) Quand tu feras une pause dans le livre de Hillegass, fais donc un tour sur le tutoriel de Tablier sur ce site ...

    Bonne Objective-Continuation
  • CocoaPowrCocoaPowr Membre
    23:08 modifié #10
    Merci à  tous pour vos réponses, c'est très sympa de votre part (même si vous me prenez un peu de haut :-(). J'ai changé le titre du topic. Bref, voilà  mon new code :

    #import &quot;AppController.h&quot;<br /><br /><br />@implementation AppController<br /><br />- (IBAction)compterCaracteres:(NSButton *)sender {<br />	<br />	NSLog(@&quot;Bouton &#39;compterCaracteresBouton&#39; enclenché&quot;);	<br />	<br />	int nombreDeCaracteres;<br />	NSString *phraseFinale; <br />	NSString *phraseTapee;<br />	<br />	phraseTapee = [texteSaisie stringValue];<br />	nombreDeCaracteres = [phraseTapee length];<br />	<br />	<br /> phraseFinale = @&quot;La chaine %@ contient %d caractères&quot;, phraseTapee, nombreDeCaracteres;<br />	<br />	[texteSortie setStringValue:phraseFinale];<br />	<br />	}<br /><br />@end<br />
    


    Le problème provient de cette ligne de code : phraseFinale = @La chaine %@ contient %d caractères", phraseTapee, nombreDeCaracteres;

    Les caractères %@ et %d sont reconnus par NSLog, mais je ne sais pas s'ils sont reconnus par les textfield ? Ce serait sympa de m'aider à  corriger cette petite ligne de code. Après, je ne vous embêterai plus, promis !
  • 23:08 modifié #11
    <br /> phraseFinale = [NSString stringWithFormat:@&quot;La chaine %@ contient %d caractères&quot;, phraseTapee, <br />nombreDeCaracteres];
    
  • CocoaPowrCocoaPowr Membre
    août 2009 modifié #12
    Z'etes gentils quand même, :p. J'ai connu le Java et l'ActionScript et je préfère de loin l'objective C, sa syntaxe est funny et l'environnement Cocoa est sublime, voilà  ma .m terminée :

    <br />//<br />//&nbsp; AppController.m<br />//&nbsp; iStringCalc<br />//<br />//&nbsp; Created by Julien Bénard on 03/08/09.<br />//&nbsp; Copyright 2009 __Lolero&#39;s Corporation__. All rights reserved.<br />//<br /><br />#import &quot;AppController.h&quot;<br /><br /><br />@implementation AppController<br /><br />- (IBAction)compterCaracteres:(NSButton *)sender {<br />	<br />	NSLog(@&quot;Bouton &#39;compterCaracteresBouton&#39; enclenché&quot;);	<br />	<br />	int nombreDeCaracteres;<br />	NSString *phraseFinale; <br />	NSString *phraseTapee;<br />	<br />	phraseTapee = [texteSaisie stringValue];<br />	nombreDeCaracteres = [phraseTapee length];<br />	<br />	if (nombreDeCaracteres&gt;1) {<br />	<br />	phraseFinale = [NSString stringWithFormat:@&quot;La chaine &#39;%@&#39; contient %d caractères&quot;, phraseTapee, <br />					nombreDeCaracteres];<br />	} else {<br />		<br />		phraseFinale = [NSString stringWithFormat:@&quot;La chaine &#39;%@&#39; contient %d caractère&quot;, phraseTapee, <br />						nombreDeCaracteres];<br />	}<br /><br />	<br />	[texteSortie setStringValue:phraseFinale];<br />		<br />	<br />	}<br /><br />@end<br />
    


    Merci encore et à  la prochaine !

    Ow ow... Soucis, j'aimerai pouvoir copier du texte d'ailleurs que du champ de texte de l'appli et pouvoir le coller dans l'appli. Mais malheureusement, le collé ne fonctionne que si le copié a été effectué dans l'appli, comment changer ça ? Merci d'avance les génies !
  • 23:08 modifié #13
    Ouvre un autre sujet parce que là  ça s'écarte un peu :D
Connectez-vous ou Inscrivez-vous pour répondre.