![]() |
1
3
在与苹果工程师在AppKit中合作后,找到了一个解决方案。 在我们的应用程序中,由于各种原因,我们通过这种方法“刷新”事件队列:
Mac OS X系统在启动时向应用程序发送“显示”事件。我们的 脸红 函数在启动时被调用,它有效地将该事件从队列中删除,但Mac OS X的核心进程部分有自己的内部队列,可以跟踪显示和隐藏以及其他类型的事件类型,这样它就不会发送重复的消息。(我会调查是否真的需要冲洗)
问题是当
这个特殊问题的解决方案是在清除事件时更具选择性。对于我的新实现,我不清楚将由核心流程发送的事件。
由于“显示”事件在启动时未被清除,请立即显示和隐藏工作! 特别感谢苹果的KF! |
![]() |
2
0
这种技术不适合发表评论,但我可能建议近距离接触DTrace。我在上面的注释中建议将NSWindow子类化,并将NSLog语句放在-orderOut:等方法中。然而,使用DTrace可能会更有效——尽管正如你所看到的,知道你将要观察的对象的地址仍然很有用——好处是你不会在代码中乱放一堆NSLog语句。 最简单的脚本可能是:
并且将通过执行以下操作使用应用程序的进程id进行调用:
在这种特殊情况下,arg0将包含窗口的地址。不幸的是,从DTrace中获取窗口的标题甚至NSString的内容显然不是一件小事,但这可能是值得的。我有个问题 here 和 here 看看是否有人知道做这两件事中的任何一件。(如果你能得到窗口的标题,你可以设置一个从窗口地址到字符串的映射。) 将探针连接到您认为可能涉及的任何和所有方法、函数等都很容易,因此您可以尝试“跟踪事件”来解决此问题。 因此,最终,我建议继续添加DTrace探测,直到有东西提供所需的提示来解决这个问题。 |
|
Forest Lam · 我应该怎么做才能在这里看到分布式驱动器段? 1 年前 |
![]() |
Andrew · 我需要帮助为这个问题编写代码 2 年前 |
![]() |
Gen Tan · 节点-v显示节点的旧版本 2 年前 |
![]() |
xdavidliu · XCode项目对C++标准的选择没有得到尊重 2 年前 |
![]() |
Yannick · Ruby(或FFI?)执行Jekyll命令时出错 2 年前 |
![]() |
FreyGeospatial · 显示Mac终端中隐藏的文件和文件夹 2 年前 |
![]() |
viedev · SwiftUI:macOS上文本字段中文本过长的问题 2 年前 |