如何在基于文档的 macOS 应用程序中处理不同的文档类型?

2024-03-08

如何在一个 macOS 文档应用程序中处理两种不同的自定义文档类型?

从 macOS Document App 模板开始,我定义了两种类型,它们也注册在 info.plist 中:

extension UTType {
    static var test1: UTType {
        UTType(exportedAs: "com.exapmple.test1")
    }
}

extension UTType {
    static var test2: UTType {
        UTType(exportedAs: "com.example.test2")
    }
}

Apple 文档 https://developer.apple.com/documentation/swiftui/documentgroup says:

您的应用程序可以通过添加额外的内容来支持多种文档类型 文档组场景:

但所示的示例只有一种可以创建的类型,另一种是只读的(编辑器模式)。

如果我在主应用程序结构中执行此操作(这基本上是模板中的样板:

@main
struct MultipleDocumentsApp: App {
    var body: some Scene {
        DocumentGroup(newDocument: DocumentOne()) { file in
            Content1View(document: file.$document)
        }
        DocumentGroup(newDocument: DocumentTwo()) { file in
            Content2View(document: file.$document)
        }
    }
}

..生成的“新”菜单如下所示,我只能创建类型 1 的文档:

显然,对于两种文档类型,我需要两个不同的“新建...”菜单项。我有什么想法可以实现这一目标吗?


它还是NSDocumentController基于,所以优点和缺点也是相同的 - 我们有默认文档类型的自动处理,对于其他一切 - 回到编码。

因此,您所做的一切都是正确的,唯一剩下的就是以编程方式添加创建其他(非默认)类型的新文档。

这是方法的主要部分:

Button("New Document2") {
  let dc = NSDocumentController.shared
  if let newDocument = try? dc.makeUntitledDocument(ofType: "com.example2.plain-text") {
    dc.addDocument(newDocument)
    newDocument.makeWindowControllers()
    newDocument.showWindows()
  }
}

完全的结果和代码在这里 https://github.com/Asperi-Demo/4SwiftUI/blob/master/Answers/Handle_different_document_types.md

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在基于文档的 macOS 应用程序中处理不同的文档类型? 的相关文章

随机推荐