隐藏NSMutableArray中的所有UILabel

时间:2011-08-04 20:16:15

标签: iphone objective-c for-loop nsmutablearray

我想使用for循环隐藏各种UILabel。

@interface MyViewController : UIViewController {
 NSMutableArray * labelArray;
}
@property (nonatomic, retain) IBOutlet UILabel *label1, *label2, *label3;
...
-(void)viewDidLoad {
 [super viewDidLoad];
 [labelArray initWithObjects:label1,label2,label3,nil];

 for(int i=0; i<sizeof(labelArray); i++){
  UILabel *label = [labelArray objectAtIndex:i];
  label.hidden = !label.hidden;
 }
}

执行此操作时,不会隐藏标签。它们已经在Interface Builder中“连接”了。我做错了什么?谢谢!

1 个答案:

答案 0 :(得分:3)

这不是sizeof的用途。这是一个编译器构造,它告诉你一个值占用了多少字节,这无法确定运行时NSMutableArray中有多少元素。你想要:

for (UILabel *label in labelArray) {
    label.hidden = !label.hidden;
}

如果这不起作用,那么你的数组不包含你认为它的对象 - 很可能,你忘了实际创建数组 - 只需将init发送到nil就不会创建一个对象。不管怎样,你应该做labelArray = [[NSMutableArray alloc] initWithObjects:label1,label2,label3,nil];allocinit携手合作。