Как я должен передать int в stringWithFormat?


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

что нужно делать?

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

10 ответов:

этого:

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

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

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

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

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

документация SDK также рекомендует использоватьNSInteger to long в этом случае (чтобы соответствовать @ " %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
*/