web-dev-qa-db-ja.com

どのようにintをstringWithFormatに渡す必要がありますか?

StringWithFormatを使用してラベルのテキストプロパティに数値を設定しようとしていますが、次のコードは機能しません。 NSStringにintをキャストできません。メソッドはintをNSStringに自動的に変換する方法を知っていると期待していました。

ここで何をする必要がありますか?

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

これを行う:

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

@ "%d"は32ビットでのみ機能することに注意してください。 64ビットプラットフォーム用にコンパイルする場合、互換性のためにNSIntegerの使用を開始したら、形式指定子として@ "%ld"を使用する必要があります。

46

Marc Charbonneauが書いた:

@ "%d"は32ビットでのみ機能することに注意してください。 64ビットプラットフォーム用にコンパイルする場合、互換性のためにNSIntegerの使用を開始したら、形式指定子として@ "%ld"を使用する必要があります。

興味深いことに、ヒントをありがとう、NSIntegersで@ "%d"を使用していました。

SDKドキュメントでは、この場合(@ "%ld"に一致するように)NSIntegerlongにキャストすることも推奨されています。例:

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

ソース: Cocoaの文字列プログラミングガイド-文字列形式指定子 (iPhone開発者登録が必要)

40
squelart

整数には%dまたは%iを使用します。 %@はオブジェクトに使用されます。

ただし、次のコードが同じタスクを実行し、はるかに明確であることは注目に値します。

label.intValue = count;
24
Zach Langley

そしてコメディの価値のために:

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

(NSNumberを扱っている日があると便利かもしれませんが)

13
squelart

32ビットおよび64ビットで安全にするには、 Boxed Expressions のいずれかを使用します。

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

投稿したスニペットは、あなたがやろうとしていることを示すための単なるサンプルですか?

私が尋ねる理由は、メソッドにincrementという名前を付けたが、値をインクリメントするのではなく、それを使用してテキストラベルの値を設定しているようだからです。

整数値を設定してラベルにこの値を表示させるなど、もっと複雑なことをしようとしている場合は、バインディングの使用を検討できます。例えば

プロパティcountを宣言し、incrementアクションでこの値を何にでも設定してから、IBでラベルのテキストをcountの値にバインドします。キー値コーディング(KVC)にcountを使用している限り、ラベルの表示を更新するためにコードを記述する必要はありません。また、設計の観点から見ると、結合が緩くなっています。

1
Abizern

long long intを忘れないでください:

long long int id = [obj.id longLongValue];
[NSString stringWithFormat:@"this is my id: %lld", id]
1
Craig Bruce
label.text = [NSString stringWithFormat:@"%d", XYZ]; 

//result:   label.text = XYZ
//use %d for int values
0
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
Aruna