2013-08-29 92 views
2
NSMutableArray *experienceValues; 
experienceValues = [NSMutableArray alloc] initWithObjects:0,83,174,276,nil]; 

NSLog(@"%@", [experienceValues objectAtIndex:3]); 

爲什麼這總是拋出-[__NSArrayM objectAtIndex:]: index 3 beyond bounds for empty array當它被明確分配並初始化之前的行?的NSMutableArray總是空

+1

你的問題已經得到了很好的回答,但你沒有收到第2行的任何警告或錯誤? – colincameron

+0

首先,爲什麼不讓第1行和第2行成爲一行?其次,在[[NSMutableArray all ...]之前的第二行中缺少'['',最後在每個整數之前需要'@'。 – Popeye

回答

3

您需要包裝像@0, @83, @174, ...這樣的整數值,因爲原始整數不是對象。

+1

完美,正是我在尋找的。 – DuskFall

1

Objective-C集合類只能存儲對象;不像int這樣的原始圖形。

您需要將它們包裝在NSNumber對象中。

如果這些是字面值,那麼@Kirsteins提供的答案將演示語法。

2

該數組是空的,因爲參數是零終止的,0被解釋爲零。

該數組應該只包含對象(而不是像int這樣的基元)。在你的情況下,你應該爲所有的數字創建NSNumbers。你可以用數字文字語法@2.0來做到這一點。

1

試試這個

NSMutableArray *experienceValues = [[NSMutableArray alloc] initWithObjects:@0,@83,@174,@276,......., nil]; 

NSLog(@"%d", [experienceValues objectAtIndex:3]); 

由於initWithObjects:只接受對象,你需要把唯一的對象是

+1

我認爲@ 0(NSNumber)會比@「0」(NSString)更好 –

+0

感謝您的建議和是的,它肯定會更好:) –

3

的NSMutableArray裏類如可可大部分的集合類,只接受對象。所以,如果你想放的數字,你不能把原始類型,但NSNumber類的實例只是,這樣的:

[[NSMutableArray alloc] initWithObjects:[NSNumber numberWithInt:0]...etc 

或用文字:

[[NSMutableArray alloc] initWithObjects:@0,@83,@174,@276.. etc 
+0

輝煌,謝謝,但我無法接受任何8分鐘的答案 – DuskFall

+1

沒什麼大不了的,歡迎你。我還想指出的是,當你獲得價值時,你會得到一個NSnumber對象,所以你不能對它進行「數學運算」。所以[[experienceValues objectAtIndex:3] intValue]將返回正確的原始類型。 – Andrea

+1

備註:'@ 0,@ 83'是「NSNumber文字」。 「下標」是例如'array [0]'或'dict [@「key」]'。 –

1

你要加入整數值給NSArray。

NSMutableArray *experienceValues = [[NSMutableArray alloc] initWithObjects:[NSNumber numberWithInteger:42],nil]; 

然後將其轉換回整數一樣,

NSLog(@"%@", [experienceValues objectAtIndex:0]); 
+1

在這裏你添加的字符串,而不是NSNumber文字 – colincameron

+0

@ c.cam108..yes,那不是理想的方式做..我同意你和做apolozige舊方法添加字符串,然後將其轉換爲整數...所以編輯答案.. –