macOS文档控制器NSDocumentController
macOS文档控制器NSDocumentController

macOS文档控制器NSDocumentController

NSDocumentController 是 macOS 文档型应用(Document-Based App)中的核心类之一,负责管理整个应用中打开的文档实例,处理用户的打开、新建、保存操作,并协调 NSDocument 的生命周期。

主要功能

1、管理文档集合:跟踪当前打开的 NSDocument 实例。

2、提供新建、打开等菜单行为:处理 File > New, File > Open 等操作。

3、协调窗口控制器:确保每个文档都有对应窗口。

4、文件类型判断:支持多种文件扩展名和类型的判断。

5、自动保存和恢复状态:与系统状态恢复机制集成。

6、统一入口:应用中唯一的 NSDocumentController.shared。

常用属性

1、shared:NSDocumentController类型,单例,所有文档操作的统一入口。

2、documents:[NSDocument]类型,当前打开的所有文档。

3、currentDocument:NSDocument?类型,当前处于活动状态的文档。

4、currentDirectory:URL类型,当前打开文档的默认目录。

5、recentDocumentURLs:[URL]类型,最近打开的文档路径。

6、documentClassNames:[String]类型,所有注册的 NSDocument 子类名称。

常用方法

1、openDocument(_:):打开一个文件(会自动判断文件类型并创建对应的 NSDocument)。

2、openDocument(withContentsOf:display:completionHandler:):打开指定文件,常用于异步文件打开。

3、newDocument(_:):创建新文档(等价于 File > New)。

4、makeDocument(for:withContentsOf:ofType:):给定文件创建文档对象(可 override)。

5、noteNewRecentDocumentURL(_:):添加到最近打开文档列表。

6、clearRecentDocuments(_:):清除最近打开文档记录。

7、document(for:):根据窗口返回其对应的文档。

使用场景

1、创建一个新文档

NSDocumentController.shared.newDocument(nil)

2、打开文件

NSDocumentController.shared.openDocument(nil)

3、打开指定URL

NSDocumentController.shared.openDocument(withContentsOf: url, display: true) { document, wasAlreadyOpen, error in
    if let doc = document {
        print("文档打开成功:\(doc)")
    } else if let error = error {
        print("打开失败:\(error)")
    }
}

与NSDocument配合关系图

和SwiftUI搭配

SwiftUI 目前不直接支持 NSDocumentController,但可以用:

NSDocumentController.shared.openDocument(withContentsOf: url, ...)

并通过 NSHostingController 显示 SwiftUI 界面。

总结

NSDocumentController管理全局文档状态、创建/打开/关闭文档。

通过NSDocumentController.shared单例管理,配合NSDocument实现文档生命周期。

相关文章

macOS构建文档的NSDocument:https://fangjunyu.com/2025/07/03/macos%e6%9e%84%e5%bb%ba%e6%96%87%e6%a1%a3%e7%9a%84nsdocument/

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注