私はアプリケーションに取り組んでいます。このアプリケーションにはいくつかの 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: