1

私はアプリケーションに取り組んでいます。このアプリケーションにはいくつかの NSWindows があり、開いていないときに NSWindows のいずれかにアクセスするために 1 つの StatusItem があります。これらのウィンドウの一部は、新しい番号とステータスでインターフェイスを継続的に更新しています。問題は、システム ステータス バーの StatusItem をクリックすると、ウィンドウの更新がブロックされ、StatusMenu を閉じるまで更新が表示されないことです。

4

1 に答える 1

3

これは実行ループ モードに関するものです。

メイン スレッドで実行される遅延操作は通常NSDefaultRunLoopMode、メインの実行ループに対してスケジュールされます。これは、メニューまたはモーダル ダイアログが開いているときに実行されないことを意味します。代わりに使用する必要がありますNSRunLoopCommonModes。これにより、デフォルト モードとイベント トラッキング (メニュー、ダイアログ) モードの両方で実行できるようになります。

例えば:

  • NSTimerを使用して更新イベントを起動する場合は、 の代わりにと組み合わせてscheduledTimerWithTimeInterval使用​​します。timerWithTimeInterval[[NSRunLoop currentRunLoop] addTimer:theTimer forMode:NSRunLoopCommonModes]

  • を使用している場合はperformSelectorOnMainThread:withObject:waitUntilDone:、代わりに を使用して引数performSelectorOnMainThread:withObject:waitUntilDone:modes:を渡します。[NSArray arrayWithObject:NSRunLoopCommonModes]modes:

于 2013-01-10T09:39:56.950 に答える