appendString ne marche pas

bofybofy Membre
16:26 modifié dans API AppKit #1
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)...

Réponses

  • Philippe49Philippe49 Membre
    16:26 modifié #2
    dans 1207493235:

    - (void) awakeFromNib {
    NSMutableString * abc = [NSMutableString string];
    NSLog(@abc : %@", abc);
    abc = @init abc;
    ....
    [abc appendString:[NSString stringWithFormat:@%@", xyz]];

    Je dois faire une erreur grossière du genre if (a = b), mais laquelle ?


    abc=@init abc change le pointeur en un pointeur sur une  immutable NSString *
    Ta dernière ligne demande d'ajouter du texte à  cette string

  • bofybofy Membre
    16:26 modifié #3
    Bon, ben oui, quoi, c'est évident ...

    Somme toute, les pointeurs m'emmerderont jusqu'au bout !

    Encore merci.

  • Philippe49Philippe49 Membre
    16:26 modifié #4
    dans 1207496454:

    Somme toute, les pointeurs m'emmerderont jusqu'au bout !


    Ben non, ils t'ont fait lire une dizaine de pages, c'est tout bénéf ...   ;)

  • Philippe49Philippe49 Membre
    avril 2008 modifié #5
    dans 1207493235:

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


    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.

Connectez-vous ou Inscrivez-vous pour répondre.