当我将文档文件放在其图标上时,如何阻止 MacOS 应用程序打开新窗口?

问题描述 投票:0回答:1

我正在使用 SwiftUI 构建一个 MacOS 应用程序,总体来说它运行得很好。但我正在尝试实现一个文件导入功能,但遇到了一个我不明白的问题。我创建了一个简单的基于 JSON 的自定义文件格式,我可以使用“文件”菜单命令导出该文件格式,也可以毫无问题地导入该文件格式。但我还尝试允许通过将文件拖放到 Finder 中应用程序的图标上来导入文件,结果发现这是有问题的。

该应用程序采用单窗口界面设计,每个可以导入/打开的文件都在主窗口/视图的列表界面中以列表形式表示。当我使用菜单命令时,它会按预期工作。当我将文件放在应用程序图标上时,它会添加该文件表示的列表,但还会打开应用程序主窗口的新实例。

我的应用程序是使用 SwiftUI 应用程序结构设置的。它的主体由一个 WindowGroup 组成,该 WindowGroup 包含一个 NavigationStack,而 NavigationStack 又包含主视图/窗口。 App 结构还声明了一个引用 AppDelegate 类的 NSApplicationDelegateAdaptor。该 AppDelegate 类包含将文件拖放到其图标上时调用的代码:

 func application(_ application: NSApplication, open urls: [URL]) {
        // checks to make sure requirements are fulfilled, 
       // then calls the file import method
    }

我是否使用了错误的方法来实现此功能,或者我还做错了什么?换句话说,如何通过将文件拖放到应用程序图标上来导入/打开文件,而不在单窗口应用程序中生成不需要的新窗口?

macos cocoa swiftui
1个回答
0
投票

我在添加到我发现与我的问题相关的答案的评论中找到了解决方案。在 SwiftUI's application(_ openFile:) never call when opening a file from Finder 中找到的解决方案是添加

.handlesExternalEvents(matching: [])
我的 App 结构中 WindowGroup 块的修饰符。

© www.soinside.com 2019 - 2024. All rights reserved.