Objective c 尝试将整数强制转换为NSNumber-取而代之的是奇怪的数字

Objective c 尝试将整数强制转换为NSNumber-取而代之的是奇怪的数字,objective-c,ios,xcode,Objective C,Ios,Xcode,“rowNumber”记录在如下位置:79050688。“rowNumberAsInt”作为数字记录在16下。如何正确转换int -(int)randomNumberGenerator{ int rowNumberAsInt; NSNumber *rowNumber; randomNumberPool = [[NSMutableArray alloc]initWithCapacity:16]; while (![randomNumberPool containsObject:rowNumb

“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;

}
NSString
提供了
%@
格式,允许打印对象。您应该更改行:

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


顶行按原样打印
NSNumber
对象的内存地址。实际上,这可能是一个随机数,但不是您想要的方式

NSString
提供了
%@
格式,允许打印对象。您应该更改行:

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


顶行按原样打印
NSNumber
对象的内存地址。实际上,这可能是一个随机数,但不是您想要的方式

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

NSLog(@"random rowNumber: %@ ", rowNumber);
或者使用intValue方法:

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

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

NSLog(@"random rowNumber: %@ ", rowNumber);
或者使用intValue方法:

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

您还应该解释用NSNumber打印的值是指针值(NSNumber对象的内存地址)。感谢NSGOD和MacMake的解释。您还应该解释用NSNumber打印的值是指针值(NSNumber对象的内存地址)。感谢NSGOD和MacMake的解释。感谢Ramy的解释。@user465001如果这回答了您的问题,请通过勾选旁边的绿色标记接受答案(或NSGOD的答案),以便其他用户知道您不再需要进一步的解释,并将此问题标记为已解决(顺便说一句,这会给你更多的声誉分数)@AliSoftware它们都是很好的答案。你会选择哪一个?这取决于你,我会说一个对你来说似乎更好的解释…即使在这种情况下,我同意它们几乎是一样的;)但只要选择一个(即使任意选择,因为它们是等价的)将问题标记为已解决!谢谢你的解释,Ramy@user465001如果这回答了你的问题,请通过勾选旁边的绿色标记来接受答案(或NSGod的答案),这样其他用户就会知道你不再需要进一步的解释,并将这个问题标记为已解决(顺便说一句,这会给你更多的声誉分数)@它们都是很好的答案。你会选择哪一个?这取决于你,我会说对你来说似乎更好的解释…即使在这种情况下,我同意他们几乎是一样的;)但是只要选择一个(即使是任意的,因为它们是等效的)来标记问题已解决!