2010-12-09 131 views
1

例如:我有一個可變數組的BOOL(或[NSNumber numberWithBool:TRUE];)。 然後我想改變,例如這個數組中的第一個值爲FALSE。更改數組內的值

[array addObject:[NSNumber numberWithBool:TRUE]]; 
[array objectAtIndex:0] ??? 

我知道一個很奇怪的方式來完成這個任務。

[array replaceObjectAtIndex:0 withObject:[NSNumber numberWithBool:FALSE]]; 

是的,這充分滿足了我,但我正在尋找另一種方式,那就是比這更簡單。例如[[array objectAtIndex:0] setBoolValue:FALSE];例如,想象一下,如果我有UIButton而不是BOOL:[[array objectAtIndex:0] setHidden:TRUE];或者這只是夢想?

在此先感謝!

回答

10

做到這一點,最好的辦法是

[array replaceObjectAtIndex:0 withObject:[NSNumber numberWithBool:FALSE]]; 

原因是,[array objectAtIndex:0]返回NSNumber,不像如果你有中UIButton秒的陣列,其將返回UIButton對象,你可以進行操作。既然你得到了一個NSNumber作爲回報,你不能直接做NSNumber,因爲它沒有你想要的方法,所以你不得不對包含NSNumber的數組進行操作。

+0

哦,現在對我來說已經很清楚了。它似乎是NSNumber只是沒有這種方法。 – 0xDE4E15B 2010-12-09 20:40:53

+0

我試着在NSMutableStrings的NSMutableArray上使用`replaceObjectAtIndex`,並得到一個「無法識別的選擇器發送到實例」的錯誤。當它是一串字符串時,你有什麼特別的要求嗎?我也意識到這是一個相當古老的線程,是否有可能因爲寫了這些東西而改變了一些東西(我正在使用ARC,所以可能會釋放它不應該的東西)? – GeneralMike 2012-09-26 16:47:13

2

沒有什麼能阻止你發送變異消息給數組中的某個對象,但是NSNumber根本不可變。這就是爲什麼你必須用另一個替換數字對象。這與數組或語言無關 - 你只能改變一個NSNumber。

0

這裏要理解的東西:數組是指向對象的指針的簡單集合。因此,你可以很容易的像
((UIButton*)[array objectAtIndex:0]).hidden=TRUE;
修改對象是可能的,並經常完成。但是將一個對象換成另一個對象,您需要像您指出的那樣使用替換技術。 然而,簡單的對象,正如@Chuck所說的那樣,簡直不可變(像NSNumber)。

請注意,我的代碼在穩定性方面是非常糟糕的。你怎麼知道這是一個UIButton,你是從你的魔法帽子裏拔出來的(即陣列?)