gpt4 book ai didi

cocoa - 具有多个窗口的 NSDocument -- Appkit 对话框表跳转到错误的窗口

转载 作者:行者123 更新时间:2023-12-03 17:37:46 27 4
gpt4 key购买 nike

很少使用,但Apple的NSDocument文档描述了如何为单个文档设置具有多个窗口的NSDocument。我正在开发一个数据库应用程序来执行此操作。以下是打开两个窗口的支票簿数据库文档的示例。每个窗口显示文档的不同 View ,在本例中,后面是类似电子表格的 View ,前面窗口是总结该数据集的图表。此示例显示一个文档的两个窗口,但用户可以根据需要为每个文档创建任意多个窗口,每个窗口以不同的方式显示相同的基础文档。

enter image description here

一切正常,除了,如果打开系统对话框表(另存为、打印、页面设置),大多数情况下(但不是每次)对话框表跳转到另一个窗口并附加到该窗口而不是当前窗口,如本影片所示。

enter image description here

请注意,虽然对话框表附加到包含图表的窗口,但它可以正确打印电子表格窗口中的内容。如果我按打印,将打印正确的内容。

对于打印,我们的代码所做的就是调用 NSDocument printDocument: 方法。

[NSApplication sendActionToFirstResponder:@selector(printDocument:)];

页面设置代码也只是调用 NSDocument。

[NSApplication sendActionToFirstResponder:@selector(runPageLayout:)];

我们的代码不会自定义任何这些对话框表,它们完全是库存的。

对于另存为命令,我们的应用程序中根本没有代码,当按下选项键时,它会自动出现在菜单中。

此问题出现在我们的应用程序支持的所有 macOS 版本中(从 10.9 到 10.13)。也许这是一个很少见的 AppKit bug,因为单个文档的多个窗口很少被使用?

此问题不会导致崩溃,也不会阻止用户执行他们想要的操作,但它是非常明显的错误,并且会降低用户对程序质量的信心。

供我引用,这是 Panorama X 问题跟踪器中的#221。

最佳答案

实现/覆盖NSDocument属性windowForSheet

The value of this property may be nil, in which case the sender should present an app-modal panel. The NSDocument implementation of this property sets the value to the window of the first window controller, or [NSApp mainWindow] if there are no window controllers or if the first window controller has no window.

关于cocoa - 具有多个窗口的 NSDocument -- Appkit 对话框表跳转到错误的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50581620/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com