Domanda

  

Eventuali duplicati:
   Come faccio a concatenare stringhe in Objective-C?

In primo luogo, la piattaforma è iPhone e Label.text cambia l'etichetta visualizzata. Si consideri questo scenario:

Ho un array di interi. E voglio visualizzarlo sullo schermo.

Ecco il mio prendere su di esso:

-(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]]]; 
}

Come si può probabilmente vedere, io sono abbastanza confuso. Pls pls help me out: (

È stato utile?

Soluzione

Prova questo:

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

Altri suggerimenti

Dal momento che si sta utilizzando un ciclo, non essere un po 'attenti sia con Tom e soluzioni di Benjie. Ognuno di essi creano un oggetto autoreleased in più per ogni iterazione. Per un piccolo ciclo, va bene, ma se la dimensione del ciclo è illimitato o se le stringhe sono di grandi dimensioni, questo può portare a un grande picco di memoria e le prestazioni di successo. In particolare su iPhone, questo è esattamente il tipo di ciclo che può portare a problemi di memoria sorprendenti a causa di picchi di memoria di breve durata.

La seguente soluzione ha una minor richiesta di memoria (è anche leggermente più veloce e richiede meno di battitura). Si noti la chiamata a -appendFormat: piuttosto che -appendString. Questo evita la creazione di una seconda stringa che verrà gettato via. Ricordate che la stringa finale ha uno spazio aggiuntivo alla fine che si può decidere di sbarazzarsi. È possibile risolvere che sia trattando la prima o l'ultima iterazione in modo diverso, o tagliando l'ultimo spazio dopo il ciclo.

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

Non dimenticare [NSArray componentsJoinedByString:]. In questo caso non si dispone di un NSArray, ma nei casi più comuni in cui si fa, questo è probabilmente il modo migliore per ottenere quello che stai cercando.

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

Un altro metodo senza utilizzare NSMutableString:

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

Ecco una piena attuazione (correggendo gli intervalli):

-(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;
}

Si potrebbe anche fare in questo modo (ad esempio, se si voleva un elenco separato da virgola):

-(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:@", "];
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top