Подтвердить что ты не робот

Как объединить строку в Objective-C (iPhone)?

Возможный дубликат:
Как объединить строки в Objective-C?

Во-первых, платформа iPhone и label.text изменяет отображаемую метку. Рассмотрим этот сценарий:

У меня есть массив целых чисел. И я хочу отобразить его на экране.

Вот мой пример:

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

Как вы, наверное, видите, я довольно смущен. PLS PLS помочь мне: (

4b9b3361

Ответ 1

Попробуйте следующее:

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

Ответ 2

Поскольку вы используете цикл, будьте осторожны с решениями Tom и Benjie. Каждый из них создает дополнительный автореализованный объект для каждой итерации. Для небольшого цикла это прекрасно, но если размер цикла неограничен или если строки велики, это может привести к очень большому всплеску памяти и повышению производительности. В частности, на iPhone это именно тот цикл, который может привести к неожиданным проблемам памяти из-за коротких замыканий памяти.

Следующее решение имеет меньший объем памяти (он также немного быстрее и требует меньшего набора текста). Обратите внимание на вызов -appendFormat:, а не -appendString. Это позволяет избежать создания второй строки, которая будет выброшена. Помните, что конечная строка имеет дополнительное пространство в конце, которое вы можете захотеть избавиться. Вы можете исправить это путем обработки первой или последней итерации по-другому или путем обрезания последнего пробела после цикла.

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

Не забывайте [NSArray componentsJoinedByString:]. В этом случае у вас нет NSArray, но в обычных случаях, когда вы это делаете, это, вероятно, лучший способ получить то, что вы ищете.

Ответ 3

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

Ответ 4

Другой метод без использования NSMutableString:

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

Здесь полная реализация (исправление диапазонов):

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

Вы также можете сделать это так (например, если вам нужен список с разделителями-запятыми):

-(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:@", "];
}