2016-02-23 34 views
-3

喜的名字我不能得到可變數組名內的另一個可變數組目標C:無法讀取可變數組

NSMutableArray *array1; 
NSMutableArray *array2; 
NSMutableArray *Section; 

array1 = [NSMutableArray arrayWithObjects:@"row 1", @"row 2",nil]; 
array2 = [NSMutableArray arrayWithObjects:@"row one", @"row two", @"row three", @"row four",nil]; 

Section = [[NSMutableArray alloc]init]; 
[Section addObject: array1]; 
[Section addObject: array2]; 

,當我試圖讓名字,但我得到這個:

NSLog(@"%@",[Section objectAtIndex:0]); 

,這是輸出:

"row 1", 
"row 2" 

我怎麼能抽到名字陣列1和數組2?

預期成果是:

陣列1

+0

「名稱」?你究竟是什麼意思? var的名字?你能展示預期的產出嗎? – Larme

+0

是不是你想使用NSMutableDictionary而不是NSMutableArray? (有一個鍵=>數組關聯) –

+0

我想獲取數組名稱而不是數組內容 – Neo

回答

1

接下來當然是說明性的,但是這是在本質上是怎麼回事。

您似乎誤解了什麼變量是,它只是一個盒子。當你寫:

NSInteger rowCount; 

您請求該系統發現一個盒子,從一堆未使用的盒子,這就是存儲NSInteger類型的合適的尺寸。在計算機中有很多盒子,它需要一個相互區分的盒子,所以每個盒子都有一個名稱。這個名字很難理解,例如:

0000000000001101000111001110110110111110111011111100101011111110 

因爲電腦通常只使用0和1。你不能使用你會保持打字錯了一個計算機程序,即使你的代碼它改變爲更合適的人是毫無意義的:

D1CEDBEEFCAFE 

它仍然是沒有意義的。

(他們真的是一樣的!不過當然我挑那些0'1和1的細心,大多數名字並不那麼令人難忘。)

鑑於這種計算機語言允許您使用更可讀有意義的名字,上面的rowCount,用來指代你所要求的方框 - 編譯器保持你的名字到真實名字的映射。

重要提示:上述所有是關於如何在變量(又名框)命名的,它有什麼做的,你可能會放在這個盒子。所以,當你寫:

rowCount = 42; 

價值42尚未獲得了rowCount的替代名稱,所有已經發生的值42已被放置在一個名爲rowCount箱(在本例中爲一個方便的名字電腦箱D1CEDBEEFCAFE)。如果你以後寫:

NSInteger anotherRowCount = rowCount;

那麼rowCount,目前42,被複制到一個名爲anotherRowCount箱。如果您查看anotherRowCount框,您所看到的全部爲42,但沒有提及該值來自rowCount

變量名和這些變量包含的值是不同的,並且名稱和值之間沒有關聯。

現在,如果你回頭看看你的代碼更復雜一些,而不是抱着你那些拿着NSMutableArray *NSInteger值盒 - 但這並不改變正在發生的事情的本質,一個盒子一個盒子。

您首先要求提供三個框,然後將值放在您命名爲array1array2的那些框中。

接下來,您在您已命名的框中輸入一個值section總是使用小寫字母開始變量名稱)。您放入section中的不是簡單的,例如42,而是一個可以保存其他值的值。

然後你複製在兩個盒子array1array2,並將它們添加到value您儲存箱section。那些複製的值與它們來自的框名稱無關,框名稱array1array2未被複制到存儲在框section中的中。

那麼,什麼是存儲在箱子array1array2section

儘量不要去鬥眼在這一點上...

上面我說的是存儲在section價值並不簡單,像42,而是一個可容納其他值。 array1array2也是如此。但那是什麼價值?那麼它是NSMutableArray *類型的東西,我們知道,因爲這是我們所要求的 - 三盒可以容納NSMutableArray *值。

* in NSMutableArray *表示「盒子名稱」!所以NSMutableArray *這個類型是「盒子的盒子名稱,其值爲NSMutableArray」。當你寫:

section = [[NSMutableArray alloc]init]; 

右手邊是要找到能夠保持NSMutableArray一箱的指令(注:無*),並且該指令返回那個盒子當做的其值。該值存儲在section中。並且該值是不是像aBigBoxWhichCanHoldAnNSMutableArray,甚至fred,指令上面並沒有給它一個很好的友好名稱 - 它只是一個盒子中的計算機名稱,類似:

1101111010101101111110101100111011011110101011011111101011001110 

什麼這一切的手段就是當你寫:

[section addObject: array1]; 

array1被複制到存儲在section。那是一個框名稱,但它肯定不是"array1"或甚至計算機的真實姓名爲您已調用array1的框。它是存儲在該框內的名稱,該名稱對您來說基本上沒有意義 - 一串0和1的長串。

希望可以幫助更多的混淆!

+0

最後我用NSDictionary來解決我的數據存儲結構=) – Neo