更改数组内的值

时间:2010-12-09 20:34:05

标签: objective-c nsmutablearray boolean

例如:我有一个可变数组的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];或者这只是梦想?

提前致谢!

3 个答案:

答案 0 :(得分:10)

最好的方法是

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

原因是[array objectAtIndex:0]返回NSNumber,不像你有一个UIButton数组会返回一个你可以操作的UIButton对象。由于您获得了NSNumber作为回报,因此您无法直接执行NSNumber,因为它没有您想要的方法,因此您必须对数组进行操作持有NSNumber

答案 1 :(得分:2)

没有什么可以阻止你将变异消息发送到数组中的对象,但NSNumber根本不可变。这就是为什么你必须用另一个替换数字对象。它与数组或语言无关 - 你只是无法改变NSNumber。

答案 2 :(得分:0)

这里要理解的东西:数组是指向对象的简单指针集合。因此,你可以很容易地做到像    ((UIButton*)[array objectAtIndex:0]).hidden=TRUE;
可以并且经常进行修改对象。但是将一个对象换成另一个对象,你需要使用替换技术。 但是,如上所述@Chuck,更简单的对象根本不可变(如NSNumber)。

请注意,我的上述代码在稳定性方面非常糟糕。你怎么知道它是一个UIButton你从你的魔法帽(即阵列?)中拉出来的?)