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