這裏是你的程序的僞代碼:
//
// 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