[Objective-C] Utilisation de stringWithFormat: ??

Nihonium

Membre expert
Club iGen
27 Juillet 2008
2 328
530
salut,

je suis en train de faire le challenge du chapitre 5 du bouquin d'Aaron Hillegass, Programmation Cocoa sous Mac OS X.

le but : lorsque l'utilisateur saisit une chaine de caractères puis clique sur le bouton, le message affiche la chaine et le nombre de caractères qu'elle contient (cf screenshot ci dessous.


un indice dit "il vous sera également utile de connaitre les méthodes suivantes de la classe NSString":
Bloc de code:
-(NSString *)stringValue
-(void)setStringValue:(NSString *)aString
______
-(int)length
+(NSString *)stringWithFormat:(NSString *),...
Voilà, mon code: tout fonctionne, jusqu'au moment où j'essaie de concaténer les chaines de ce qui est entré (la string), et le nombre de caractères de la string...

Bloc de code:
#import "AppController.h"  
@implementation AppController 

-(void)setStringValue:(NSString *)theString {      
}  

-(IBAction)countChars:(id)sender {      
    NSString *theString = [textField stringValue];     
    int theResult = [theString length];          
    NSLog(@"The RESULT IS : %d", theResult);         

        
   if ([theString length] == 0) {         

     NSLog(@"la chaine de %@ est vide", textField);         
     [theCount setStringValue:@"Please enter something in the field !"]; 
}                 

        // marche bien jusqu'ici ...         
    NSLog(@"'%@' contains %d characters", theString, theResult);         
       // Ici je dois avoir un truc comme "blah blah blah contains 18 characters" ------
       // mais j'ai du mal avec stringWithFormat: 
       // un truc comme :                   
       // [NSString stringWithFormat:@"'%@' contains %@ characters...", theString,theResult];   }  

@end
J'avoue que malgré le bouquin et la doc apple, j'ai du mal à saisir comment ça fonctionne. quelqu'un pourrait m'aider, déjà à nettoyer ce code qui doit vous ravager les yeux tellement ça doit avoir aucun sens, et pour utiliser stringWithFormat ?

merci d'avance...
 
Erratum : c'est réglé...
Bloc de code:
#import "AppController.h"


@implementation AppController

-(void)setStringValue:(NSString *)theString {
    
}

-(IBAction)countChars:(id)sender {

    NSString *theString = [textField stringValue];
    int theResult = [theString length];
    finalResult = [NSString stringWithFormat:@"'%@' contains %d characters...", theString,theResult];
    
    if ([theString length] == 0) {
        NSLog(@"la chaine de %@ est vide", textField);
        [theCount setStringValue:@"Please enter something in the field !"];
}
    else {
        NSLog(@"'%@' contains %d characters", theString, theResult);
        [theCount setStringValue:finalResult];
    }
}

@end
Quelqu'un peut quand meme m'aider à voir si le code est assez propre? ce qu'il y a en trop ou en moins... gestion de la mémoire ou je ne sais quoi, j'ai pas tout saisi pour l'instant :mouais:

Et j'ai 7 avertissements qui trainent sous Xcode, je comprends pas d'où ils viennent (warning: local declaration of 'theString' hides instance variable)!
 
warning: local declaration of 'theString' hides instance variable
Tu as deux variables nommées "theString" définies dans le bloc correspondant à ta fonction countChars, celle en local que tu nous as montré dans ton code et une autre membre de ta classe AppController, sûrement définie dans ton .h.
 
Tu as deux variables nommées "theString" définies dans le bloc correspondant à ta fonction countChars, celle en local que tu nous as montré dans ton code et une autre membre de ta classe AppController, sûrement définie dans ton .h.


Thx ntx, c'est réglé :)

j'avais effectivement calé la définition de theString aussi dans le .h :)