试图将一个整数转换为NSNumber - 取而代之的是奇怪的数字

时间:2012-09-16 00:18:55

标签: objective-c ios xcode

“rowNumber”记录为: 79050688 。 “rowNumberAsInt”被记录为 16 下的数字。如何正确转换我的int?

-(int)randomNumberGenerator{

int rowNumberAsInt;
NSNumber *rowNumber;

randomNumberPool = [[NSMutableArray alloc]initWithCapacity:16];

while (![randomNumberPool containsObject:rowNumber]) {
    rowNumberAsInt = (arc4random() % 16);
    rowNumber = [NSNumber numberWithInt:rowNumberAsInt];
    [randomNumberPool addObject:rowNumber];     
}

NSLog(@"random rowNumber: %d ", rowNumber);
NSLog(@"random rowNumberAsInt: %d ", rowNumberAsInt);
return rowNumberAsInt;

}

2 个答案:

答案 0 :(得分:6)

你不能打印一个NSNumber,就像它是一个int,因为它不是一个int,而是一个包装int的对象。而是使用%@格式说明符:

NSLog(@"random rowNumber: %@ ", rowNumber);

或者使用intValue方法:

NSLog(@"random rowNumber: %d ", [rowNumber intValue]);

答案 1 :(得分:3)

NSString提供%@作为允许打印对象的格式。你应该改变这一行:

NSLog(@"random rowNumber: %d ", rowNumber);

NSLog(@"random rowNumber: %@ ", rowNumber);

原样的顶行将打印NSNumber对象的内存地址。在实践中,这可能是一个随机数,但不是你想要的方式。 ; - )