【问题标题】:How to handle different document types in a document based macOS app?如何在基于文档的 macOS 应用程序中处理不同的文档类型?
【发布时间】:2022-07-04 08:20:51
【问题描述】:

如何在一个 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")
    }
}

苹果documentation 说:

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

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

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

@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 的文档:

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

【问题讨论】:

    标签: macos swiftui 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()
      }
    }
    

    填写findings and code is here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-01
      • 2020-10-25
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      • 2015-03-13
      • 2018-07-25
      • 1970-01-01
      相关资源
      最近更新 更多