appendString ne marche pas
bofy
Membre
Bonjour
voici un bout de code (copié/collé)
[tt]
- (void) awakeFromNib {
NSMutableString * abc = [NSMutableString string];
NSLog(@abc : %@", abc);
abc = @init abc;
NSLog(@abc : %@", abc);
NSMutableString * xyz = [NSMutableString string];
NSLog(@xyz : %@", xyz);
xyz = @ + xyz;
NSLog(@xyz : %@", xyz);
NSLog(@xyz-1 : %@", [NSString stringWithFormat:@%@", xyz]);
[abc appendString:[NSString stringWithFormat:@%@", xyz]];
NSLog(@abc-append : %@", abc);
}
[/tt]
J'obtiens dans la console :
[tt]
06/04/08 16:39:37 RN_05[2342] abc :
06/04/08 16:39:37 RN_05[2342] abc : init abc
06/04/08 16:39:37 RN_05[2342] xyz :
06/04/08 16:39:37 RN_05[2342] xyz : + xyz
06/04/08 16:39:37 RN_05[2342] xyz-1 : + xyz
06/04/08 16:39:37 RN_05[2342] An uncaught exception was raised
06/04/08 16:39:37 RN_05[2342] Attempt to mutate immutable object with appendString:
06/04/08 16:39:37 RN_05[2342] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to mutate immutable object with appendString:'
06/04/08 16:39:37 RN_05[2342] Stack: (
2418761460,
2510706540,
2418761220,
2418761276,
2445181036,
9776,
2418817796,
2471418736,
2471383412,
2471381784,
2471380724,
2471379932,
9444
)
[/tt]
J'ai essayé des dizaines de combinaisons NSString, NSMutableString... J'ai lu des dizaines de pages : tout paraà®t simple, mais ça ne marche jamais chez moi ?
Je dois faire une erreur grossière du genre if (a = b), mais laquelle ?
PS : le awakeFromNib me permet d'exécuter mon bout de code, sinon je ne sais pas faire autrement que de passer par une méthode (IBAction)...
voici un bout de code (copié/collé)
[tt]
- (void) awakeFromNib {
NSMutableString * abc = [NSMutableString string];
NSLog(@abc : %@", abc);
abc = @init abc;
NSLog(@abc : %@", abc);
NSMutableString * xyz = [NSMutableString string];
NSLog(@xyz : %@", xyz);
xyz = @ + xyz;
NSLog(@xyz : %@", xyz);
NSLog(@xyz-1 : %@", [NSString stringWithFormat:@%@", xyz]);
[abc appendString:[NSString stringWithFormat:@%@", xyz]];
NSLog(@abc-append : %@", abc);
}
[/tt]
J'obtiens dans la console :
[tt]
06/04/08 16:39:37 RN_05[2342] abc :
06/04/08 16:39:37 RN_05[2342] abc : init abc
06/04/08 16:39:37 RN_05[2342] xyz :
06/04/08 16:39:37 RN_05[2342] xyz : + xyz
06/04/08 16:39:37 RN_05[2342] xyz-1 : + xyz
06/04/08 16:39:37 RN_05[2342] An uncaught exception was raised
06/04/08 16:39:37 RN_05[2342] Attempt to mutate immutable object with appendString:
06/04/08 16:39:37 RN_05[2342] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to mutate immutable object with appendString:'
06/04/08 16:39:37 RN_05[2342] Stack: (
2418761460,
2510706540,
2418761220,
2418761276,
2445181036,
9776,
2418817796,
2471418736,
2471383412,
2471381784,
2471380724,
2471379932,
9444
)
[/tt]
J'ai essayé des dizaines de combinaisons NSString, NSMutableString... J'ai lu des dizaines de pages : tout paraà®t simple, mais ça ne marche jamais chez moi ?
Je dois faire une erreur grossière du genre if (a = b), mais laquelle ?
PS : le awakeFromNib me permet d'exécuter mon bout de code, sinon je ne sais pas faire autrement que de passer par une méthode (IBAction)...
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
abc=@init abc change le pointeur en un pointeur sur une immutable NSString *
Ta dernière ligne demande d'ajouter du texte à cette string
Somme toute, les pointeurs m'emmerderont jusqu'au bout !
Encore merci.
Ben non, ils t'ont fait lire une dizaine de pages, c'est tout bénéf ...
Tu crées un fichier pgm.m en dehors de tout projet
Tu y écris
#import <Foundation/Foundation.h>
int main(int argc, char**argv){
NSAutoreleasePool * pool=[[NSAutoreleasePool alloc] init];
NSMutableString * abc = [NSMutableString string];
NSLog(@abc : %@", abc);
abc = @init abc;
NSLog(@abc : %@", abc);
NSMutableString * xyz = [NSMutableString string];
NSLog(@xyz : %@", xyz);
xyz = @ + xyz;
NSLog(@xyz : %@", xyz);
NSLog(@xyz-1 : %@", [NSString stringWithFormat:@%@", xyz]);
[abc appendString:[NSString stringWithFormat:@%@", xyz]];
[pool release];
return 0;
}
Tu compiles dans le terminal
gcc pgm.m -o pgm -framework Foundation
et tu lances la commande pgm (ou ./pgm), toujours dans le terminal.