目的C – NSSetを使用してsetEnabled:NOをNSButtonsのセットに使用できますか?

私はIBActionからspeechTimeを渡し、0にカウントダウンするタイマーアプリケーションを作成しました。5つの異なるspeechTimesと、音声時間カウントダウンを停止するトグルボタンがあります。タイマーがカウントダウンしている間にIBActionが押されていないボタンを無効にすることができます(speechTimeのリセットを防ぐため)。

私は現在いくつかの[speechButton setEnable:NO]と[…
setEnable:YES]コールを持っています。しかし、私はそれがメモリ管理が貧弱だと思って、本当に厄介なコードを作る。私はすべてのボタンのNSSetのようなものを実装したいと思いますし、[button
disable]/[buttons enable]で終わるように1つのメソッドだけを有効/無効にします。

私はこのようなもので遊んだ。

TimerViewController.h

@implement TimerViewController{
NSButton *buttonA, *buttonB, *buttonC; 
}
@property (retain, readonly) NSSet *hijackableButtons;
-(void)disableButtons
@end

TimerViewController.m

...
@synthesize hijackableButtons;
-(void)init{
//blah blah blah
hijackableButtons = [NSSet setWithObjects:*buttonA,*buttonB,*buttonC,nil];
}
//...

-(void)disableButtons{
for (id buttons in hijackableButtons){
    if (buttons isKindOfClass:[NSButton class]){
        [buttons setEnabled:NO];
    }

しかし、これは機能しません。任意の提案をいただければ幸いです!

ベストアンサー

NSResponderが
-enumarateObjectUsingBlock:のチェックを行うことに同意します。私はそのようなメソッドを使用するまでBlockについて納得していませんでした。

あなたのコードでは、これはあなたの問題です

hijackableButtons = [NSSet setWithObjects:*buttonA,*buttonB,*buttonC,nil];

このように書き直す

hijackableButtons = [NSSet setWithObjects:buttonA, buttonB, buttonC, nil];

ここでは不要な * を無効にしてください。


あなたのinitメソッドの bla bla
セクションにあなたが作成されていると仮定しています。
IBOutletの場合、このコードはinitメソッドに属しません。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です