# [Objective-C] Utilisation de stringWithFormat: ??



## BS0D (23 Février 2011)

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.

Voir la pièce jointe 50822
​ 
un indice dit "il vous sera également utile de connaitre les méthodes suivantes de la classe NSString": 

```
-(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...


```
#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...


----------



## BS0D (23 Février 2011)

Erratum : c'est réglé... 

```
#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)!


----------



## ntx (23 Février 2011)

BS0D a dit:


> 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.


----------



## BS0D (23 Février 2011)

ntx a dit:


> 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


----------

