2011-08-04 19 views
1

forループを使用して非表示にしたいさまざまなUILabelsがあります。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; 
} 

、その後、あなたの配列は、あなたはそれがないと信じていたオブジェクトが含まれていません - 単にnilでないinitに送る - 恐らく、あなたが実際には配列を作成するために忘れてしまいましたオブジェクトを作成します。いずれにせよ、あなたはおそらくlabelArray = [[NSMutableArray alloc] initWithObjects:label1,label2,label3,nil];をやっているはずです。 allocinitは一緒に手袋を着用してください。

+0

残念ながら、私は今日の票が切れています。 –

+0

それは、私は明示的に割り当てることを忘れていた。ありがとう! –

関連する問題