这里是你的程序的伪代码:
//
// Inside of your main function....
//
// Set up the Autorelease pool and then create an array
//
// Declare an int
//
// Add the int to an array, while wrapping it in an NSNumber
//
// Log the value of the first object in the array, using the int formatter
//
// Clean up and return
//
要记录数组中的第一个对象,但NSArray
不能保持原始的,这不是包裹在一个Objective-C的对象。
为了更好地理解你的代码,尝试改变这行代码:
int someNumber = 3;
[array addObject:[NSNumber numberWithInt:someNumber]];
展开他们一点点。试试这个:
int someNumber = 3;
NSNumber *aNumber = [NSNumber numberWithInt:someNumber];
[array addObject:aNumber];
所以,你已经在正确的NSNumber
包裹int
,但你不能解开它。你需要问你NSNumber
的,它拥有像这样的int
:
[[array objectAtIndex:0] intValue];
或者做记录中的一行:
NSLog(@"%i" , [[array objectAtIndex:0] intValue]);
字符“%i
”被称为“格式化” 。不同类型的值需要不同的格式化器。当您使用Objective-C对象时,您使用“%@
”。对于NSInteger
或int
,您可以使用%i
。对于浮动,你会使用“%f
”。重点是你需要打开这个数字,或者使用Objective-C格式化程序来处理字符串。
有关您之前获得的奇怪值的简要说明:这是RAM中的内存地址。这是您在使用不正确的格式化程序时最接近的事情。在某些情况下,使用错误的格式化程序将导致EXC_BAD_ACCESS。你是“幸运的”,并且有一个奇怪的价值,而不是一个死亡计划。在继续之前,我建议您学习字符串和格式化程序。它会让你的生活变得更轻松。
等等......但是数组的objectAtIndex 0是一个整数,它是一个基元,而不是一个对象。对? – Monkeyanator
是的,它的工作,但我有点困惑,为什么... – Monkeyanator
@Monkeyanator objectAtIndex:0是一个对象,一个NSNumber。 – ThomasW