macOS文档类应用:多文档合并为性能配置文件的实现疑问
问题解答
核心疑问的直接结论
- 不需要将PerformanceSetup类设为NSDocument子类:它只是用于合并/解析配置的临时数据容器,不需要具备NSDocument的文档生命周期管理能力,打开性能配置文件时也不需要生成它的文档实例,直接解码后生成对应的Configuration(NSDocument子类)实例即可。
- 必须为性能配置文件注册独立的文档类型:要让系统识别这个文件类型,确保它能出现在打开对话框的可选列表中,同时让应用关联对应的文件扩展名,这样自定义的
NSDocumentController才能正确识别并处理这类文件。
具体实现要点
1. 文档类型注册
在Info.plist中添加新的文档类型配置,需要包含:
- 唯一的类型标识符(比如
com.yourcompany.app.performance-setup) - 对应的文件扩展名(比如
.perfsetup) - 文档名称、图标等可选配置
- 指定文档类型的所有者为你的应用
2. 保存性能配置文件的实现
- 新增「另存为性能配置文件」菜单项,绑定到自定义的动作方法
- 在方法中执行以下步骤:
- 收集当前所有打开的
Configuration文档实例 - 创建
PerformanceSetup实例,将收集到的配置存入其configurations数组 - 使用
NSFileWrapper或自定义编解码逻辑(如JSON/PropertyList)将PerformanceSetup序列化为文件 - 通过
NSSavePanel让用户选择保存路径,完成文件写入
- 收集当前所有打开的
3. 打开性能配置文件的处理
- 自定义
NSDocumentController的openDocument(withContentsOf:ofType:completionHandler:)方法:- 判断文件类型是否为性能配置文件的类型标识符
- 如果是,读取文件内容并解码为
PerformanceSetup实例 - 遍历其
configurations数组,为每个配置创建对应的Configuration文档实例并打开 - 如果是普通配置文件,按原有逻辑处理
关键注意事项
PerformanceSetup只需实现Codable协议(或自定义编解码逻辑)即可,无需继承NSDocument- 打开性能配置文件后,不要创建任何
PerformanceSetup相关的文档窗口,直接打开各个Configuration的窗口 - 测试文档类型关联,确保双击性能配置文件时能正确唤起应用并打开对应的多个配置文档
内容的提问来源于stack exchange,提问作者MassMover
相关产品推荐
相关产品推荐

