2011-08-04 27 views
1

我有不同的UILabels,我想隐藏使用for循环。隐藏NSMutableArray中的所有UILabels

@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

1.你有没有alloc'd labelArray? 2.不要使用sizeof(labelArray),而是使用[labelArray count]来确定索引范围。不要忘记labelArray是一个指针,sizeof()将返回指针大小。 – viggio24

回答

3

这不是sizeof的用途。这是一个编译器结构,它告诉你一个值占用了多少字节,它不知道运行时在NSMutableArray中有多少个元素。你想:

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

如果不工作,那么你的数组中不包含的对象,你相信它 - 很可能,你忘了实际创建阵列 - 简单地发送init为零不创建一个对象。无论哪种方式,你应该可以做labelArray = [[NSMutableArray alloc] initWithObjects:label1,label2,label3,nil];allocinit一起走手套。

+0

不幸的是我今天的选票不足。 –

+0

就是这样,我忘记了明确分配。谢谢! –