質問

「変換」ボタンのあるアプリがあります。このボタンをクリックすると、アプリはNSTaskを使用して新しいプロセスを開始し、プロセスが終了するまでボタンをグレー表示します。

私の問題は、アプリがプロセスの終了を待っている間にユーザーが行ったクリックを保存することです。そのため、ボタンがグレー表示されていても、ユーザーはそれをクリックでき、プロセスは終了するとすぐに再開されます。

プロセスの使用が終了するのを待っています:

[task waitUntilExit];

このタスクの完了を待っている間にユーザー入力を無視するにはどうすればよいですか

役に立ちましたか?

解決

-[NSTask waitUntilExit] は、もちろんブロック呼び出しです。つまり、スレッドは一時停止し(実行ループと同様)、スレッドに送信されるすべてのイベントは、実行ループが処理できるまでキューに入れられます。

waitUntilExit の代わりに、次のようなことをします:

- (IBAction) myButtonMethod {
  NSTask * task = ....;
  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(taskFinished:) name:NSTaskDidTerminateNotification object:task];
  [myButton setEnabled:NO];
  [task launch];
}

- (void) taskFinished:(NSNotification *)note {
  [myButton setEnabled:YES];
}

これにより、タスクが起動し、ボタンが無効になりますが、スレッドがブロックされることはありません。スレッドが完了するのを待っていないためです。代わりに、タスクが終了するたびに非同期通知を待っています。タスクが完了するまでボタンは無効になるため、送信されたすべてのイベントは無視されます。

他のヒント

さらに簡単:

[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top