Question

  

Possible en double:    Comment puis-je concaténer des chaînes en Objective-C?

Tout d'abord, la plate-forme est l'iPhone et Label.text change l'étiquette affichée. Considérez ce scénario:

J'ai un tableau d'entiers. Et je veux afficher sur l'écran.

Voici mon avis sur la question:

-(IBAction) updateText: (id)sender {
   int a[2];
   a[0]=1;
   a[1]=2;
   a[2]=3;
   for (int i=0; i<=10;i++)
     label.text = [NSString stringByAppendingString: [NSString stringWithFormat: @"%i", a[i]]]; 
}

Comme vous pouvez le voir, je suis assez confus. Pls pls me aider: (

Était-ce utile?

La solution

Essayez ceci:

NSMutableString* theString = [NSMutableString string];
for (int i=0; i<=10;i++){
    [theString appendString:[NSString stringWithFormat:@"%i ",i]];
}
label.text = theString;

Autres conseils

Puisque vous utilisez une boucle, ne soyez un peu prudent avec Tom et les solutions de Benjie. Ils créent chacun un objet autoreleased supplémentaire par itération. Pour une petite boucle, qui est très bien, mais si la taille de la boucle est ou non borné si les chaînes sont grandes, cela peut conduire à un très grand coup de pic de la mémoire et de performance. En particulier sur l'iPhone, c'est exactement le genre de boucle qui peut conduire à des problèmes de mémoire surprenants en raison de pics de mémoire de courte durée.

La solution suivante a une plus petite empreinte mémoire (il est aussi un peu plus rapide et prend moins de frappe). Notez l'appel à -appendFormat: plutôt que -appendString. Cela évite la création d'une deuxième chaîne qui sera jeté. Rappelez-vous que la dernière chaîne a un espace supplémentaire à la fin que vous pouvez vous débarrasser. Vous pouvez corriger cela soit par le traitement de la première ou la dernière itération différemment, ou en coupant le dernier espace après la boucle.

NSMutableString* theString = [NSMutableString string];
for (int i=0; i<=10;i++){
    [theString appendFormat:@"%i ",i];
}
label.text = theString;

Ne pas oublier [NSArray componentsJoinedByString:]. Dans ce cas, vous ne disposez pas d'un NSArray, mais dans les cas communs où vous faites, cela est probablement la meilleure façon d'obtenir ce que vous cherchez.

//NSArray *chunks   
string = [chunks componentsJoinedByString: @","];

Une autre méthode sans utiliser NSMutableString:

NSString* theString = @"";
for (int i=0; i<=10;i++){
    theString = [theString stringByAppendingFormat:@"%i ",i];
}
label.text = theString;

Voici une mise en œuvre complète (correction de vos gammes):

-(IBAction) updateText: (id)sender {
     int a[3];
     a[0]=1;
     a[1]=2;
     a[2]=3;
     NSString *str = @"";
     for (int i=0; i<3;i++)
       str = [str stringByAppendingFormat:@"%i ",i];
     label.text = str;
}

Vous pouvez aussi le faire comme ceci (par exemple si vous voulez une liste séparée par des virgules):

-(IBAction) updateText: (id)sender {
     int a[3];
     a[0]=1;
     a[1]=2;
     a[2]=3;
     NSMutableArray *arr = [NSMutableArray arrayWithCapacity:3];
     for (int i=0; i<3;i++)
         [arr addObject:[NSString stringWithFormat:@"%i",i]];

     label.text = [arr componentsJoinedByString:@", "];
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top