Как я должен передать int в stringWithFormat?
Я пытаюсь использовать stringWithFormat для установки числового значения в свойстве text метки, но следующий код не работает. Я не могу привести int к NSString. Я ожидал, что метод будет знать, как автоматически преобразовать int в NSString.
что нужно делать?
- (IBAction) increment: (id) sender
{
int count = 1;
label.text = [NSString stringWithFormat:@"%@", count];
}
10 ответов:
имейте в виду, что @"%D" будет работать только на 32 бит. Как только вы начнете использовать NSInteger для совместимости, Если вы когда-либо компилировали для 64-битной платформы, вы должны использовать @"%ld" в качестве спецификатора формата.
Марк Шарбонно написал:
имейте в виду, что @"%D" будет работать только на 32 бит. Как только вы начнете использовать NSInteger для совместимости, Если вы когда-либо компилировали для 64-битной платформы, вы должны использовать @"%ld" в качестве спецификатора формата.
интересно, спасибо за подсказку, я использовал @ "%d " с моим
NSInteger
s!документация SDK также рекомендует использовать
NSInteger
tolong
в этом случае (чтобы соответствовать @ " %ld"), например:NSInteger i = 42; label.text = [NSString stringWithFormat:@"%ld", (long)i];
источник: строки руководство по программированию на какао - формат строка спецификаторов (требуется регистрация разработчика iPhone)
вы хотите использовать
%d
или%i
для целых чисел.%@
используется для объектов.стоит отметить, что следующий код будет выполнять ту же задачу, и гораздо яснее.
label.intValue = count;
и для комедийного значения:
label.text = [NSString stringWithFormat:@"%@", [NSNumber numberWithInt:count]];
(хотя это может быть полезно, если однажды вы имеете дело с NSNumber)
чтобы быть 32-битным и 64-битным безопасным, используйте один из Коробочной Выражения:
label.text = [NSString stringWithFormat:@"%@", @(count).stringValue];
сниппет ты выложил просто пример, чтобы показать, что вы пытаетесь сделать?
причина, по которой я спрашиваю, что вы назвали метод
increment
, но вы, кажется, используете это, чтобы установить значение текстовой метки, а не увеличивать значение.если вы пытаетесь сделать что - то более сложное-например, установить целочисленное значение и иметь метку, отображающую это значение, вы можете рассмотреть возможность использования Привязок. е.г
вы объявляете свойство
count
и вашincrement
действие устанавливает это значение в любом случае, а затем в IB вы привязываете текст метки к значениюcount
. Пока вы следуете кодированию ключевых значений (KVC) с помощьюcount
, вам не нужно писать код для обновления отображения метки. И с точки зрения дизайна у вас более слабая связь.
Не забудьте для
long long int
:long long int id = [obj.id longLongValue]; [NSString stringWithFormat:@"this is my id: %lld", id]
label.text = [NSString stringWithFormat:@"%d", XYZ]; //result: label.text = XYZ //use %d for int values
NSString * formattedname; NSString * firstname; NSString * middlename; NSString * lastname; firstname = @"My First Name"; middlename = @"My Middle Name"; lastname = @"My Last Name"; formattedname = [NSString stringWithFormat:@"My Full Name: %@ %@ %@", firstname, middlename, lastname]; NSLog(@"\n\nHere is the Formatted Name:\n%@\n\n", formattedname); /* Result: Here is the Formatted Name: My Full Name: My First Name My Middle Name My Last Name */