0

NSInteger の値を取得し、それに UILabel 値を設定しようとしています。コードは次のとおりです。

counter_.text = [NSString stringWithFormat:@"%@", [counterAmount intValue]];

ここで、counter_ は私のラベルで、counterAmount は私の NSInteger です。「Receiver type 'NSInteger *' (aka 'int *') is not 'id' or interface pointer.id にキャストすることを検討してください。

これを理解する方法がよくわかりません。あなたの助けに感謝します。

4

2 に答える 2

1

intValueNSNumberC プリミティブ値を返すメソッドです。%@オブジェクトを印刷します。C プリミティブ値を出力するには、フォーマット文字列でタイプを指定する必要があります。%d符号付き整数の型です。

質問に従って、および以下のborrdenによって非常に正確に指摘されたように、ここで扱われているタイプはNSIntegerではなく ですNSNumber。iOSNSIntegerでは の typedef でintあるため、プリミティブ型を直接扱っています。NS プレフィックスは、それがオブジェクトであることを意味するものではありません。

于 2012-09-24T03:27:32.057 に答える
1

counterAmount は であるためNSInteger、使用できませんintValue(オブジェクトではないため、実際にはメッセージを送信できません)

代わりに、次を使用します。

counter_.text = [NSString stringWithFormat:@"%d", counterAmount];

そうは言っても、この値をユーザーに表示する場合は、実際には数値フォーマッターを使用して、設定アプリで表示するように設定した方法でフォーマットする必要があります。

NSNumber *number                = [NSNumber numberWithInt:counterAmount];

NSNumberFormatter *formatter    = [NSNumberFormatter new];
formatter.numberStyle           = NSNumberFormatterDecimalStyle; // Or whichever style is appropriate for your number.

counter_.text                   = [formatter stringFromNumber:number];
于 2012-09-24T03:31:47.417 に答える