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

标签 objective-c cocoa user-interface nsstatusbar

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

最佳答案

这是关于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: 参数。

关于objective-c - NSStatusItem 阻止 NSWindows 中的用户界面更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13643603/

相关文章:

java - 无法更改 GridLayout 中 JLabel 的大小

c# - 用 C# 开发应用程序的最佳第 3 方 GUI 框架是什么?

objective-c - namespace 冲突真的是 Objective-C 中的一个问题吗?

iphone - 如何准确检查表面平整度

objective-c - IBOutlet 的只读属性是否有效?是否更可取?

cocoa - 防止应用程序接收击键

objective-c - 快速枚举是否在每次迭代时评估集合表达式?

iphone - dateByAddingTimeInterval 在 IOS 应用程序开发中没有给出预期的结果

objective-c - 核心数据&TableView&PDFView : How does it all come together?

javascript - 使用 jquery 创建两列(列表)文本框