ページ 11

objective-c 排他制御

Posted: 2011年1月05日(水) 00:00
by べっきー
objective-cにて、ボタン1押下時にコールされる関数がmyAction1で
ボタン2押下時にコールされる関数がmyAction2の場合に
ボタン1押下時の処理Aが終わるまでは、ボタン2押下しても
処理Bが行われないようにするにはどのようにすればいいのでしょうか。

当方で思いつくのは、グローバル変数でフラグを持たせて
処理Aが終わるまではフラグをたてて、処理Bの前にそのフラグ
のチェックをするというぐらいしか思い浮かびません。

もう少しスマートでかっこいい方法があれば教えてください。

コード:

- (IBAction)myAction1:(id)sender {

  処理A;
}

- (IBAction)myAction2:(id)sender {
	
      処理B;
}

Re: objective-c 排他制御

Posted: 2011年1月05日(水) 01:34
by Justy
べっきー さんが書きました:ボタン1押下時の処理Aが終わるまでは、ボタン2押下しても
処理Bが行われないようにするにはどのようにすればいいのでしょうか。
 普通に組めば処理Aが終るまで処理Bは実行されないはずですが、
それぞれのボタンのアクションをマルチスレッドにしてしまったってことですか?

 状況がよく理解できていませんがそういうことであれば、@synchronizedを使ってみてはどうですか?

Re: objective-c 排他制御

Posted: 2011年1月09日(日) 04:59
by べっきー
文章の書き方がわるかったです。すみません。

アプリ起動後、ボタン1を一番はじめにおされるまでは、ボタン2を押しても蒸し続ける場合は
フラグ制御(ボタン1をおすとグローバル変数のフラグをたてる。ボタン2押下時、フラグ判定)
以外に処理はないでしょうか。

C言語ではフラグ制御もありだと思いますが、Objective-cで別にいい方法があればと
思ってます。

ご回答お願いします。

Re: objective-c 排他制御

Posted: 2011年1月09日(日) 05:00
by べっきー
「訂正」蒸し→無視

です。

Re: objective-c 排他制御

Posted: 2011年1月09日(日) 13:05
by Justy
べっきー さんが書きました:ボタン1を一番はじめにおされるまでは、ボタン2を押しても蒸し続ける場合は
フラグ制御(ボタン1をおすとグローバル変数のフラグをたてる。ボタン2押下時、フラグ判定)
以外に処理はないでしょうか。
 あー、すみません、そういう意味でしたか。

 であれば、最初はボタンそのものを非表示(setHidden:YES)、或いは不活性(setEnabled:NO)にしておき、
ボタン1が押されたら、表示(setHidden:NO)、或いは活性化setEnabled:YES)するのがベストだと思います。

Re: objective-c 排他制御

Posted: 2011年1月10日(月) 22:45
by べっきー
setHiddenを利用することで問題解消しました。ありがとうございました。

Re: objective-c 排他制御

Posted: 2011年1月10日(月) 22:46
by べっきー
解決に設定します。