我试图获取NSInteger的值并为其设置UILabel值。代码如下:
counter_.text = [NSString stringWithFormat:@"%@", [counterAmount intValue]];
其中counter_是我的标签,counterAmount是我的NSInteger。我一直得到一个“接收器类型'NSInteger *'(又名'int *')不是'id'或接口指针,考虑将其转换为id。
我不太清楚如何理解这一点。我很感谢你的帮助。
答案 0 :(得分:1)
intValue
是一个返回C原始值的NSNumber
方法。 %@
打印对象。要输出C原始值,您必须在格式化字符串中提供类型。 %d
是有符号整数的类型。
根据这个问题,正如下面的borrden所指出的那样,这里处理的类型是NSInteger
而不是NSNumber
。在iOS NSInteger
中,typedef为int
,因此您直接处理基本类型。 NS前缀并不意味着它是一个对象。
答案 1 :(得分: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];