NSDocument 子类是不是是模型对象?

Posted

技术标签:

【中文标题】NSDocument 子类是不是是模型对象?【英文标题】:Is NSDocument subclass a model object or not?NSDocument 子类是否是模型对象? 【发布时间】:2022-01-08 12:51:10 【问题描述】:

我正在为 macOS Swift 编写一个多文档应用程序。我从 Xcode 提供的 Document 应用程序模板开始。目前尚不清楚它是否是对象模型。 NSDocument是模型还是模型中包含的数据?

【问题讨论】:

【参考方案1】:

Apple says 认为“文档的数据称为数据模型”:

在 Cocoa 文档架构中,您的文档由 NSDocument 的自定义子类表示。 NSDocument 类提供了管理文档的大部分行为。在您的子类中,您可以通过提供用于读取和写入文档数据的自定义代码来覆盖或微调此行为。文档的数据称为数据模型。每个NSDocument 都有自己的NSWindowController,而NSWindowController 又会创建一个用于显示文档内容的NSWindow 对象。

因为基于文档的应用程序处理同时打开的多个文档,所以它使用NSDocumentController 来管理它们。 Cocoa 提供了管理文档的大部分基础设施。通过文件协调、版本管理和其他文档之间的冲突解决,它为使用 iCloud 提供了最简单的途径。

这个NSDocument 子类导入Cocoa 并且与UI 层代码纠缠不清,因此很难调用真正的模型对象(尽管它是一种有用的抽象)。我们中的许多人都努力使真正的“模型”对象不依赖于 UI/OS。

简而言之,NSDocument 管理的数据更适合被视为“模型”。

【讨论】:

感谢您花时间和精力帮助我了解 Apple 的架构。 Microsoft 是注释的 MVVM 后缀和前缀的强烈倡导者。然而,经过一番思考,它的架构角色污染了特定领域的术语。它类似于旧的 Microsoft Hungarian Notation,其中变量和对象标识符以其分配的类型为前缀,提供其声明语句已经提供的无关信息。虽然我可以推断出对象模型,但缺乏 MVVM 注释让我产生了疑问。

以上是关于NSDocument 子类是不是是模型对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 NSDocument 子类来打印自定义视图

`attemptRecovery(fromError:optionIndex:)` 在 NSDocument 的 Swift 子类的超类中找不到

NSDocument - 内存泄漏和应用程序崩溃

自动保存非来自用户的 NSDocument 模型更改

在没有任何窗口的情况下保持和 NSDocument 打开

NSDocument 呈现的ItemDidChange 每秒调用一次