1

我正在开发一个应用程序,这个应用程序中有几个 NSWindows 和一个 StatusItem 以便在它们未打开时访问任何 NSWindows。其中一些窗口不断用新的数字和状态更新它们的界面。问题是每当我单击系统状态栏中的 StatusItem 时,它都会阻止 Windows 上的更新,并且在关闭 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 回答