のステータスを反映するウィンドウがありますNSOperation
。NSProgressIndicator
をNSOperation
の進行状況プロパティにバインドするにはどうすればよいですか?
2 に答える
AppKit はスレッドセーフではありません。UI オブジェクトの更新はメイン スレッドで行う必要があります。KVO は、監視メッセージをスレッド間でディスパッチしません。したがって、単純な KVO 以外の進行状況インジケーターを更新する別の方法が必要になります。
NSOperation
のメソッドでは、main
進行状況メッセージを定期的にディスパッチする必要があります。最も簡単な方法NSNotificationCenter
は、カスタム通知を使用して、メイン スレッドが更新をリッスンできるようにすることです。(通知は常に送信元のスレッドで配信されることに注意してください。そのため、このperformSelectorOnMainThread:
メソッドを使用して、通知が UI スレッドで配信されるようにする必要があります。)
メイン スレッドでは、クラスをオブザーバーとして追加して、これらの通知を受け取り、進行状況インジケーターを更新する必要があります。進行状況インジケーターにバインドを使用する場合は、コントローラー オブジェクトのプロパティにバインドし、NSOperation
.
Ben Copsey のASIHTTPRequest
ラッパーは、まさにこの種のことを行います。
リクエストは のサブクラスでありNSOperation
、インスタンス化時に進行状況インジケータを渡すことができます。
コードがどのように機能するかを確認したい場合は、コードを参照できます。