StringWithFormatを使用してラベルのテキストプロパティに数値を設定しようとしていますが、次のコードは機能しません。 NSStringにintをキャストできません。メソッドはintをNSStringに自動的に変換する方法を知っていると期待していました。
ここで何をする必要がありますか?
- (IBAction) increment: (id) sender
{
int count = 1;
label.text = [NSString stringWithFormat:@"%@", count];
}
これを行う:
label.text = [NSString stringWithFormat:@"%d", count];
@ "%d"は32ビットでのみ機能することに注意してください。 64ビットプラットフォーム用にコンパイルする場合、互換性のためにNSIntegerの使用を開始したら、形式指定子として@ "%ld"を使用する必要があります。
Marc Charbonneauが書いた:
@ "%d"は32ビットでのみ機能することに注意してください。 64ビットプラットフォーム用にコンパイルする場合、互換性のためにNSIntegerの使用を開始したら、形式指定子として@ "%ld"を使用する必要があります。
興味深いことに、ヒントをありがとう、NSInteger
sで@ "%d"を使用していました。
SDKドキュメントでは、この場合(@ "%ld"に一致するように)NSInteger
をlong
にキャストすることも推奨されています。例:
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
*/