Ответ 1
Попробуйте следующее:
NSMutableString* theString = [NSMutableString string];
for (int i=0; i<=10;i++){
[theString appendString:[NSString stringWithFormat:@"%i ",i]];
}
label.text = theString;
Возможный дубликат:
Как объединить строки в 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 помочь мне: (
Попробуйте следующее:
NSMutableString* theString = [NSMutableString string];
for (int i=0; i<=10;i++){
[theString appendString:[NSString stringWithFormat:@"%i ",i]];
}
label.text = theString;
Поскольку вы используете цикл, будьте осторожны с решениями 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, но в обычных случаях, когда вы это делаете, это, вероятно, лучший способ получить то, что вы ищете.
//NSArray *chunks
string = [chunks componentsJoinedByString: @","];
Другой метод без использования 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:@", "];
}