私はアプリケーションに取り組んでいます。このアプリケーションにはいくつかの NSWindows があり、開いていないときに NSWindows のいずれかにアクセスするために 1 つの StatusItem があります。これらのウィンドウの一部は、新しい番号とステータスでインターフェイスを継続的に更新しています。問題は、システム ステータス バーの StatusItem をクリックすると、ウィンドウの更新がブロックされ、StatusMenu を閉じるまで更新が表示されないことです。
1 に答える
これは実行ループ モードに関するものです。
メイン スレッドで実行される遅延操作は通常NSDefaultRunLoopMode
、メインの実行ループに対してスケジュールされます。これは、メニューまたはモーダル ダイアログが開いているときに実行されないことを意味します。代わりに使用する必要がありますNSRunLoopCommonModes
。これにより、デフォルト モードとイベント トラッキング (メニュー、ダイアログ) モードの両方で実行できるようになります。
例えば:
NSTimer
を使用して更新イベントを起動する場合は、 の代わりにと組み合わせてscheduledTimerWithTimeInterval
使用します。timerWithTimeInterval
[[NSRunLoop currentRunLoop] addTimer:theTimer forMode:NSRunLoopCommonModes]
を使用している場合は
performSelectorOnMainThread:withObject:waitUntilDone:
、代わりに を使用して引数performSelectorOnMainThread:withObject:waitUntilDone:modes:
を渡します。[NSArray arrayWithObject:NSRunLoopCommonModes]
modes: