如何在基于文档的 macOS 应用程序中处理不同的文档类型?
How to handle different document types in a document based macOS app?
如何在一个 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 说:
Your app can support multiple document types by adding additional
document group scenes:
但是示例中只有一种类型可以创建,另一种是只读的(编辑器模式)。
如果我在主应用程序结构中执行此操作(这基本上是模板中的样板文件:
@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()
}
}
如何在一个 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 说:
Your app can support multiple document types by adding additional document group scenes:
但是示例中只有一种类型可以创建,另一种是只读的(编辑器模式)。
如果我在主应用程序结构中执行此操作(这基本上是模板中的样板文件:
@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()
}
}