2016-10-31 11 views
0

助けてください。私は自分のウィンドウに4つのNSButtonを持っています(グラデーションスタイルとして設定されています)。そして、ユーザーの入力に応じて、4つの異なる色のうち1つのカラーを(.pngファイルを使ってsetImageを使って)作ります。正常に動作します私のコードは、次のとおりです。NSButton IBOutletの名前を配列に格納する際にエラーが発生し、配列にアクセスしてNSButtonのsetImageにアクセスしました

if ([[ranColors objectAtIndex:0] isEqualToString:@"red"]) { 
    [color1 setImage:[NSImage imageNamed:@"Red.png"]]; 
} 
else if ([[ranColors objectAtIndex:0] isEqualToString:@"yellow"]) { 
    [color1 setImage:[NSImage imageNamed:@"Yellow.png"]]; 
} 
else if ([[ranColors objectAtIndex:0] isEqualToString:@"blue"]) { 
    [color1 setImage:[NSImage imageNamed:@"Blue.png"]]; 
} 
else { 
    [color1 setImage:[NSImage imageNamed:@"Green.png"]]; 
} 

私は4つのボタン(カラー1、カラー2、カラー3とcolor4)のために、このコードを4回繰り返します。 ranColorsは、ユーザーの色の選択を保持する配列です。

NSArrayを使用してボタンIBOutletの名前(color1、color2、color3、color4)を保持し、forループを使用して4サイクルを介在させてコードを単純化しようとしています。

for (int x = 0; x < 4; ++x) { 
if ([[ranColors objectAtIndex:x] isEqualToString:@"red"]) { 
    [[revealPositions objectAtIndex:x] setImage:[NSImage imageNamed:@"Red.png"]]; 
    } 
else if ([[ranColors objectAtIndex:x] isEqualToString:@"yellow"]) { 
    [[revealPositions objectAtIndex:x] setImage:[NSImage imageNamed:@"Yellow.png"]]; 
    } 
else if ([[ranColors objectAtIndex:x] isEqualToString:@"blue"]) { 
    [[revealPositions objectAtIndex:x] setImage:[NSImage imageNamed:@"Blue.png"]]; 
    } 
else { 
    [[revealPositions objectAtIndex:x] setImage:[NSImage imageNamed:@"Green.png"]]; 
    } 
} 

私はエラーを取得しています:[__NSCFConstantString setImage:]:認識されていないセレクタがインスタンス0x100006098に送信されたここでは、コードです。配列要素を読み込んだ後、setImageを正しいファイルにしようとすると、エラーが発生しています。ボタンのIBOutletの名前を配列に格納してから、その名前にアクセスしてプロパティを設定することはできないようです。

ご協力いただければ幸いです。

答えて

0

文字列をファイル名と同じに設定すると、ループなしですべての色を設定できます。

[color1 setImage:[NSImage imageNamed:[NSString stringWithFormat:@"%@.png",[ranColors objectAtIndex:0]]]]; 
[color2 setImage:[NSImage imageNamed:[NSString stringWithFormat:@"%@.png",[ranColors objectAtIndex:1]]]]; 
[color3 setImage:[NSImage imageNamed:[NSString stringWithFormat:@"%@.png",[ranColors objectAtIndex:2]]]]; 
[color4 setImage:[NSImage imageNamed:[NSString stringWithFormat:@"%@.png",[ranColors objectAtIndex:3]]]]; 

[revealPositions objectAtIndex:x]店舗NSButtonは、あなたが明確化のためにその配列にUIButtonを格納しているコードを投稿することをあなたはよろしいです。

うまくいかなかった場合はポストバックしてください。

+1

チャームのように働いた - ありがとう! – Keith

+0

それは素晴らしいです!答えを受け入れてください。ハッピーコーディング! – Yan

+1

申し訳ありません、忘れてしまいました。 – Keith

関連する問題