最小的基于文档的应用程序的教程/示例

Posted

技术标签:

【中文标题】最小的基于文档的应用程序的教程/示例【英文标题】:Tutorial/example of a minimal document-based app 【发布时间】:2012-04-29 15:19:45 【问题描述】:

我试图了解 Cocoa 中的东西是如何工作的,但我正在为一件事而苦苦挣扎。我看到http://cocoawithlove.com/2010/09/minimalist-cocoa-programming.html和http://casperbhansen.wordpress.com/2010/08/15/dev-tip-nibless-development/,我想我有点明白了。

现在,我想为“基于文档的应用程序”做同样的事情。请问,有没有人知道类似于上面的教程或示例?或者,我需要做什么才能使其工作?我想我需要创建NSDocumentController - 但它与 NSApplication 有什么关系?我从那里创建NSDocument?老实说,我有点迷路了……

【问题讨论】:

【参考方案1】:

那是六个月前的我!我也没有找到像样的教程,而是使用默认的 Xcode 项目模板开始了一个新项目:

当您开始一个新项目时,我开始使用 Xcode 为您生成的设置,并在我进行过程中逐步实现。在 *** 上有一些关于各种控制器类的使用的很好的阅读,但这是我所做的:

由 Xcode 生成的文档类是我的***控制器。我不使用 NSDocumentController。 我的应用程序的每个用例都有许多 NSViewControllers 来管理用例的各种视图。这些控制器是动态换入和换出的。***控制器由 NSDocument 类管理(在我的例子中是 NSPersistentDocument,因为我使用的是 Core Data)。

我绝不是专家,因此我支持更好的方法,但到目前为止,此设置易于使用、易于维护且易于扩展。

注意:使用 Core Data 是可选的,但随着时间的推移,我开始喜欢它,并认为它非常强大并且可以节省大量时间。当您决定不使用 Core Data 时,上述设置仍然有效,但您必须管理自己的数据。

编辑:post 解释了 NSDocumentController 的相关性。

EDIT2:来自 Apple 的 This one 也是一本有趣的读物。

EDIT3:您确实需要 NIB(或现在称为 XIB),因为它们包含您应用的 UI。您通过视图控制器(子类NSViewController)将它们拉入:

NSString *aControllerName = [anIdentifier stringByAppendingString: @"ViewController"];
NSString *aNibName = [anIdentifier stringByAppendingString: @"View"];
Class aControllerClass = NSClassFromString(aControllerName);
[self setCurrentController: [[aControllerClass alloc] initWithNibName: aNibName bundle: [NSBundle mainBundle]]];

在上面的anIdentifier 可以是Department,这将实例化DepartmentViewController 并加载XIB 名称DeparmentView

您可以使用 plist 来存储数据,但这不是必需的。有很多方法可以存储您的应用程序数据。您必须了解 Apple 现有的各种架构并做出自己的选择。

【讨论】:

我试图找到最简单、最规范的方法,我真的很喜欢上面的教程,因为它们很好地解释了内部工作。拜托,你介意发布一些代码吗?你为什么不使用NSDocumentController?如果我想使用它,我应该把它放在哪里?我想我只有一个视图 - 每个文档一个窗口。 我在上一个问题中添加了关于使用 NSDocumentController 的解释。 @EcirHana:另请参阅我对 Roger 问题已接受答案的评论。 @Peter Hosey:这实际上是一个非常有用的评论。我很想把它归类为答案:-) @Roger:是的,这正是我开始的方式。但后来我迷路了,因为它使用了 NIB 和 plist,而且没有 NSDocumentController 甚至应该有,......我需要任何捆绑软件才能让它工作吗?

以上是关于最小的基于文档的应用程序的教程/示例的主要内容,如果未能解决你的问题,请参考以下文章

Python基于 DOM 的 XML 文档解析(xml.dom.minidom)

大数据下基于Tensorflow框架的深度学习示例教程

Istio Routing极简教程

hello-weapp 微信小程序最简示例教程

hello-weapp微信小程序最简示例教程

MFC/VC 在多文档MDI程序中 子窗口初始最大化显示 如何去掉菜单栏右侧的最小化及向下还原按钮