0

我正在尝试获取 NSInteger 的值并为其设置 UILabel 值。代码如下:

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

其中 counter_ 是我的标签,而 counterAmount 是我的 NSInteger。我不断收到“接收器类型'NSInteger *'(又名'int *')不是'id'或接口指针,请考虑将其转换为id。

我不太确定如何理解这一点。我很感激你的帮助。

4

2 回答 2

1

intValue是一种NSNumber返回 C 原始值的方法。%@打印对象。为了输出 C 原始值,您必须在格式化字符串中提供类型。%d是有符号整数的类型。

根据问题,正如下面 borrden 向我指出的那样,这里处理的类型是NSInteger而不是NSNumber. 在 iOSNSInteger中是一个 typedef int,所以你直接处理一个原始类型。NS 前缀并不意味着它是一个对象。

于 2012-09-24T03:27:32.057 回答
1

由于 counterAmount 是 a 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 回答