Как я должен передать int в stringWithFormat? - PullRequest
66 голосов
/ 21 декабря 2008

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

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

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

Ответы [ 10 ]

125 голосов
/ 21 декабря 2008

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

label.text = [NSString stringWithFormat:@"%d", count];
46 голосов
/ 21 декабря 2008

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

40 голосов
/ 21 декабря 2008

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

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

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

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

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

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

24 голосов
/ 21 декабря 2008

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

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

label.intValue = count;
13 голосов
/ 21 декабря 2008

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

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

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

6 голосов
/ 14 ноября 2014

Чтобы быть 32-битными и 64-битными безопасными, используйте одно из выражений в штучной упаковке :

  label.text = [NSString stringWithFormat:@"%@", @(count).stringValue];
1 голос
/ 07 августа 2013

Не забудьте за long long int:

long long int id = [obj.id longLongValue];
[NSString stringWithFormat:@"this is my id: %lld", id]
1 голос
/ 21 декабря 2008

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

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

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

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

0 голосов
/ 14 января 2016
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
*/
0 голосов
/ 30 января 2014
label.text = [NSString stringWithFormat:@"%d", XYZ]; 

//result:   label.text = XYZ
//use %d for int values
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...