Как передать int в stringWithFormat?

Я пытаюсь использовать stringWithFormat для установки числового значения в текстовом свойстве метки, но следующий код не работает. Я не могу использовать int для NSString. Я ожидал, что метод будет знать, как автоматически преобразовать int в NSString.

Что мне нужно сделать здесь?

- (IBAction) increment: (id) sender
{
    int count = 1;
    label.text = [NSString stringWithFormat:@"%@", count];
}

Ответ 1

Сделайте это:

label.text = [NSString stringWithFormat:@"%d", count];

Ответ 2

Имейте в виду, что @ "% d" будет работать только на 32 бит. Когда вы начнете использовать NSInteger для совместимости, если вы когда-либо компилируете для 64-битной платформы, вы должны использовать @ "% ld" в качестве спецификатора вашего формата.

Ответ 3

Марк Шарбонно писал (а):

Имейте в виду, что @ "% d" будет работать только на 32 бит. Когда вы начнете использовать NSInteger для совместимости, если вы когда-либо компилируете для 64-битной платформы, вы должны использовать @ "% ld" в качестве спецификатора вашего формата.

Интересно, спасибо за подсказку, я использовал @% d с моим NSInteger s!

Документация SDK также рекомендует отбрасывать NSInteger в long в этом случае (для соответствия @ "% ld" ), например:

NSInteger i = 42;
label.text = [NSString stringWithFormat:@"%ld", (long)i];

Источник: Руководство по программированию строк для Cocoa - Спецификаторы формата строки (требуется регистрация разработчиков iPhone)

Ответ 4

Вы хотите использовать %d или %i для целых чисел. %@ используется для объектов.

Однако стоит отметить, что следующий код выполнит ту же задачу и станет намного понятнее.

label.intValue = count;

Ответ 5

И для комедийного значения:

label.text = [NSString stringWithFormat:@"%@", [NSNumber numberWithInt:count]];

(Хотя это может быть полезно, если однажды вы работаете с NSNumber)

Ответ 6

Чтобы быть 32-битным и 64-битным, используйте один из Boxed Expressions:

  label.text = [NSString stringWithFormat:@"%@", @(count).stringValue];

Ответ 7

Является ли фрагмент, который вы отправили, только как образец, чтобы показать, что вы пытаетесь сделать?

Я спрашиваю, что вы назвали метод increment, но вы, похоже, используете это, чтобы установить значение текстовой метки, а не увеличивать значение.

Если вы пытаетесь сделать что-то более сложное - например, задание целочисленного значения и наличие ярлыка отображаете это значение, вы можете рассмотреть возможность использования привязок. например

Вы объявляете свойство count, и ваше действие increment устанавливает это значение как угодно, а затем в IB, вы привязываете текст метки к значению count. До тех пор, пока вы будете следовать кодовому значению ключа (KVC) с помощью count, вам не нужно писать какой-либо код для обновления отображения этикеток. И с точки зрения дизайна у вас есть более слабая связь.

Ответ 8

Не забывайте long long int:

long long int id = [obj.id longLongValue];
[NSString stringWithFormat:@"this is my id: %lld", id]

Ответ 9

label.text = [NSString stringWithFormat:@"%d", XYZ]; 

//result:   label.text = XYZ
//use %d for int values

Ответ 10

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
*/