concaténer deux NSString

ancrouancrou Membre
16:48 modifié dans API AppKit #1
Je voudrais concaténer deux NSString

Je fais :

NSString* s1 = = [[[NSString alloc] init] autorelease];<br />s1 = [NSString stringWithFormat:@&quot;%s blabla blaba &#092;n&quot;,[s1 UTF8String]];


ça marche mais ça me semble bizarre  ???

Réponses

  • Philippe49Philippe49 Membre
    16:48 modifié #2
    dans 1208340976:

    Je voudrais concaténer deux NSString

    Je fais :

    NSString* s1 = = [[[NSString alloc] init] autorelease];<br />s1 = [NSString stringWithFormat:@&quot;%s blabla blaba &#092;n&quot;,[s1 UTF8String]];
    


    ça marche mais ça me semble bizarre  ???


    Ton premier [[[NSString alloc] init] autorelease]; ne sert à  rien.

    Il existe la méthode stringByAppendingString

  • schlumschlum Membre
    16:48 modifié #3
    Ah oui, c'est sacrement bizarre  :P

    Déjà , au lieu de %s il y a %@ qui permet de donner directement un objet (utilise la méthode "description")
    Ensuite, quand on veut faire beaucoup de modifications, on utilise NSMutableString qui a toutes les méthodes qu'il faut pour ça
  • ancrouancrou Membre
    16:48 modifié #4
    dans 1208341174:

    Ton premier [[[NSString alloc] init] autorelease]; ne sert à  rien.

    Il existe la méthode stringByAppendingString


    Merci
    Je n'ai pas besoin de faire une allocation d'un String !
    Pourquoi elle ne sert pas ?


  • ancrouancrou Membre
    16:48 modifié #5
    dans 1208341301:

    Ensuite, quand on veut faire beaucoup de modifications, on utilise NSMutableString qui a toutes les méthodes qu'il faut pour ça


    Merci
    Qu'entendez vous par "beaucoup de modifications" ?
    Je devrais utiliser NSMutableString pour une simple concaténation ?
  • schlumschlum Membre
    16:48 modifié #6
    dans 1208344268:

    dans 1208341301:

    Ensuite, quand on veut faire beaucoup de modifications, on utilise NSMutableString qui a toutes les méthodes qu'il faut pour ça


    Merci
    Qu'entendez vous par "beaucoup de modifications" ?
    Je devrais utiliser NSMutableString pour une simple concaténation ?


    Non, quand il y a beaucoup de concaténations...
  • Philippe49Philippe49 Membre
    16:48 modifié #7
    dans 1208344097:

    dans 1208341174:

    Ton premier [[[NSString alloc] init] autorelease]; ne sert à  rien.

    Il existe la méthode stringByAppendingString


    Merci
    Je n'ai pas besoin de faire une allocation d'un String !
    Pourquoi elle ne sert pas ?





    Parce que la méthode stringWithFormat est ce qu'on appelle une "Convenient Method", c'est-à -dire  un raccourci pour
    [[[NSString alloc] initWithFormat:@...,..] autorelease];

  • Philippe49Philippe49 Membre
    avril 2008 modifié #8
    En résumé,
    • Si tu as besoin occasionnellement de la NSString :
      NSString * string=[NSString stringWithFormat:"%@ blabla",otherString];
      ou
      NSString * string=[otherString stringByAppendingString:@ blabla];

    • Si tu as beaucoup de transformation à  faire sur cette NSString :
      NSMutableString * string=[NSMutableString stringWithFormat:"%@ blabla",OtherString];



    stringByAppendingString est également une "Convenient Method" en mode autorelease donc.
  • ancrouancrou Membre
    16:48 modifié #9
    Alors ma 2nd solution :
    NSString* s1;<br />s1 = [s1 stringByAppendingString: @&quot;Blaba sans accent&#092;n&quot;]; <br />
    


    Mais si je met des accents, j'ai un warning :
    warning: non-ASCII character in CFString literal


    Il n'y a pas un encoding:NSISOLatin1StringEncoding à  faire ?
    mais où et comment ?

  • schlumschlum Membre
    16:48 modifié #10
    dans 1208349978:

    Alors ma 2nd solution :
    NSString* s1;<br />s1 = [s1 stringByAppendingString: @&quot;Blaba sans accent&#092;n&quot;]; <br />
    


    Mais si je met des accents, j'ai un warning :
    warning: non-ASCII character in CFString literal


    Il n'y a pas un encoding:NSISOLatin1StringEncoding à  faire ?
    mais où et comment ?




    Non, ça ne va toujours pas, car s1 n'est pas initialisé, donc t'appelles ton truc sur "nil", ce qui va renvoyer "nil".
    Pour les accents, ça a été traité de nombreuses fois ici... Pas d'accents dans du code, que de l'ASCII ; pour mettre des accents, il y a d'autres techniques (séquences d'échappement, fichier localisés etc.)
  • ancrouancrou Membre
    16:48 modifié #11
    Merci
    Pour les accents j'entends parler de localized.strings

    Je vais l'initialiser comme au début.
  • AliGatorAliGator Membre, Modérateur
    avril 2008 modifié #12
    dans 1208350462:

    Non, ça ne va toujours pas, car s1 n'est pas initialisé, donc t'appelles ton truc sur "nil", ce qui va renvoyer "nil".
    Plus exactement stringWithFormat est une méthode de classe (identifiable par un "+" dans sa définition et dans la doc) : il faut l'appeler sur la classe NSString (c'est la classe qui crée des instances) et non sur s1, qui comme le dit schlum n'existe pas encore à  ce moment là .

    Pour les chaà®nes avec accent : sujet récent en causant
    Le cas où y'a eu la même confusion du alloc et de l'appel d'une méthode de classe sur une variable au lieu de le faire sur la classe : c'est là 
Connectez-vous ou Inscrivez-vous pour répondre.