2014-11-20 59 views
1

我會在這個可變數組中放置各種各樣的東西,但首先我只是試圖通過放入字符串,然後拔出字符串來確保它的工作。這裏是我的代碼無法正確地從NSMutableArray檢索對象

[email protected]"1"; 
[email protected]"2"; 
[email protected]"3"; 
NSMutableArray *testArray; 
[testArray addObject:str1]; 
[testArray addObject:str2]; 
[testArray addObject:str3]; 

retrieve =[testArray objectAtIndex:1]; 
NSLog(@"the test number is %@",retrieve); 

問題是,我的字符串︰檢索後收到數組中的字符串「null」。我不確定我做錯了什麼,我看過蘋果的文檔,但是我很難理解它。我知道我必須錯誤地與數組交互,但我不確定具體是什麼。幫助將不勝感激。 - 謝謝!

+0

testArray = [NSMutableArray中新]? – EDUsta 2014-11-20 18:43:25

+1

非常感謝!修復它。謝謝EDUsta! – 2014-11-20 18:44:56

回答

2

你沒有初始化您testArray

NSMutableArray *testArray = [NSMutableArray array]; 

可以填充使用新語法的數組。如果你需要的可變性僅增加了三個項目,你可以使用非可變數組代替,像這樣:

NSArray *testArray = @[ @"1", @"2", @"3"]; 

如果你確實需要的可變性,調用mutableCopy

NSMutableArray *testArray = [@[ @"1", @"2", @"3"] mutableCopy]; 
0

那麼,那是因爲testArraynil。您應該將第4行更改爲

NSMutableArray *testArray = [NSMutableArray array]; 
0

您的數組爲零。

你錯過了 NSMutableArray * testArray = [NSMutableArray array];

0

爲了澄清什麼別人告訴你:

此行

NSMutableArray *testArray; 

不創建 數組。它創建一個可用於指向可變數組的指針變量。它開始包含一個零值(零,沒有指向任何東西)。

這就像一個郵件地址,指向一個空的地段。

您需要創建(分配)並初始化一個可變數組對象才能使用它。 (繼續我們的類比,你必須建立一個房子和地址變爲有效之前把郵箱在它的前面。)

所以你需要說:

testArray = [@[ @"1", @"2", @"3"] mutableCopy]; 

打破了下來:

內部零件,

@[ @"1", @"2", @"3"] 

創建一個包含3個字符串對象的不可變數組。

然後我們要求不可變數組創建它自己的可變副本。我們將新創建的可變數組的地址保存到指針變量testArray中。

我們能做到這一點的3個步驟:

NSMutableArray *testArray; 
NSArray *tempArray = @[ @"1", @"2", @"3"]; 
testArray = [tempArray mutableCopy]; 

或一次,如@ dasblinkenlight代碼:

NSMutableArray *testArray = [@[ @"1", @"2", @"3"] mutableCopy]; 
+0

謝謝鄧肯!它現在是有道理的,有些我沒有通過閱讀蘋果文檔來理解這個概念。 – 2014-11-24 18:26:17