私はいくつかのユーザー入力が必要なバックグラウンドスレッドを持っています。バックグラウンドスレッドからNSAlertウィンドウを呼び出すことはお勧めできませんので、私はメインスレッドでこれを行うのが好きです。しかし、NSAlertウィンドウが閉じられるまでバックグラウンドスレッドを待たせることはできますか?Swift:バックグラウンドスレッドがユーザー入力を待つ方法
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0)) {
// some background task
dispatch_async(dispatch_get_main_queue()) {
// UI task asking for user input:
let alert = NSAlert()
alert.messageText = "Some text"
alert.informativeText = "Some information"
alert.addButtonWithTitle("Yes")
alert.addButtonWithTitle("No")
result = alert.runModal()
}
// some background task, treating user input (Yes/No)
}
あなたは決してココアプログラミングで「待つ」べきではありません。 – matt
作業を2つのセクションに分けることができますか?ユーザー入力前とユーザー入力後(別のメソッド、ブロックなど)?その後、ユーザー入力を取得した後、必要なデータをバックグラウンドキューに送信して、「ユーザー入力後」セクションを開始しますか?そうすれば、待ち行列をブロックする必要はありません。 – dylansturg
マットの言うこととまったく同じです。あなたはそうしたようにタスクをスピンオフし、タスクが終了したときに実行されるコールバックを供給します。 – gnasher729