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

5
如何在一个macOS文档应用程序中处理两种不同的自定义文档类型?
从macOS文档应用程序模板开始,我定义了两种类型,这些类型也在info.plist中注册:
extension UTType {
    static var test1: UTType {
        UTType(exportedAs: "com.exapmple.test1")
    }
}

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

苹果文档中指出:

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

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

如果我在主应用程序结构中执行此操作(基本上是从模板复制过来的样板代码):

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

输入图像描述

显然,我需要两个不同的“新建…”菜单项来创建这两种类型的文档。你有什么想法吗?

1个回答

4

这仍然基于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()
  }
}

完整的发现和代码在这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接