NSStatusItem阻止NSWindows中的用户界面更新

时间:2012-11-30 10:42:26

标签: objective-c cocoa user-interface nsstatusbar

我正在开发一个应用程序,在这个应用程序中有几个NSWindows和一个StatusItem,以便在它们未打开时访问任何NSWindows。其中一些窗口不断更新其界面的新数字和状态。问题是,当我单击系统状态栏中的StatusItem时,它阻止了Windows上的更新,在关闭StatusMenu之前我看不到任何更新。

1 个答案:

答案 0 :(得分:3)

这大约是Run Loop Modes

主线程上运行的延迟操作通常安排在主运行循环的NSDefaultRunLoopMode,这意味着在菜单或模式对话框打开时不运行。您需要使用NSRunLoopCommonModes,这将允许它们在默认和事件跟踪(菜单,对话框)模式下运行。

例如:

  • 如果您使用NSTimer来触发更新事件而不是scheduledTimerWithTimeInterval,请将timerWithTimeInterval[[NSRunLoop currentRunLoop] addTimer:theTimer forMode:NSRunLoopCommonModes]结合使用。

  • 如果您使用performSelectorOnMainThread:withObject:waitUntilDone:,请使用performSelectorOnMainThread:withObject:waitUntilDone:modes:,将[NSArray arrayWithObject:NSRunLoopCommonModes]传递给modes: