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 子类是不是是模型对象?的主要内容,如果未能解决你的问题,请参考以下文章
`attemptRecovery(fromError:optionIndex:)` 在 NSDocument 的 Swift 子类的超类中找不到