Ответ 1
Сделайте это:
label.text = [NSString stringWithFormat:@"%d", count];
Я пытаюсь использовать stringWithFormat для установки числового значения в текстовом свойстве метки, но следующий код не работает. Я не могу использовать int для NSString. Я ожидал, что метод будет знать, как автоматически преобразовать int в NSString.
Что мне нужно сделать здесь?
- (IBAction) increment: (id) sender
{
int count = 1;
label.text = [NSString stringWithFormat:@"%@", count];
}
Сделайте это:
label.text = [NSString stringWithFormat:@"%d", count];
Имейте в виду, что @ "% d" будет работать только на 32 бит. Когда вы начнете использовать NSInteger для совместимости, если вы когда-либо компилируете для 64-битной платформы, вы должны использовать @ "% ld" в качестве спецификатора вашего формата.
Марк Шарбонно писал (а):
Имейте в виду, что @ "% d" будет работать только на 32 бит. Когда вы начнете использовать NSInteger для совместимости, если вы когда-либо компилируете для 64-битной платформы, вы должны использовать @ "% ld" в качестве спецификатора вашего формата.
Интересно, спасибо за подсказку, я использовал @% d с моим NSInteger
s!
Документация SDK также рекомендует отбрасывать NSInteger
в long
в этом случае (для соответствия @ "% ld" ), например:
NSInteger i = 42;
label.text = [NSString stringWithFormat:@"%ld", (long)i];
Источник: Руководство по программированию строк для Cocoa - Спецификаторы формата строки (требуется регистрация разработчиков iPhone)
Вы хотите использовать %d
или %i
для целых чисел. %@
используется для объектов.
Однако стоит отметить, что следующий код выполнит ту же задачу и станет намного понятнее.
label.intValue = count;
И для комедийного значения:
label.text = [NSString stringWithFormat:@"%@", [NSNumber numberWithInt:count]];
(Хотя это может быть полезно, если однажды вы работаете с NSNumber)
Чтобы быть 32-битным и 64-битным, используйте один из Boxed Expressions:
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
*/