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

时间:2012-04-29 15:19:45

标签: cocoa document-based

我试图理解Cocoa中的东西是如何工作的,但我正在努力解决一件事。我看到了http://cocoawithlove.com/2010/09/minimalist-cocoa-programming.htmlhttp://casperbhansen.wordpress.com/2010/08/15/dev-tip-nibless-development/,我想我有点理解。

现在,我想对“基于文档的应用程序”做同样的事情。请问,有没有人知道类似上面的教程或示例?或者,我需要做些什么来使它工作?我想我需要创建NSDocumentController - 但它与NSApplication有什么关系?我从那里创建NSDocument?坦率地说,我有点失落......

1 个答案:

答案 0 :(得分:10)

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

enter image description here

我开始使用Xcode为您启动的设置,当您开始一个新项目并逐步实施时。关于各种控制器类的使用,Stackoverflow上有一些很好的阅读,但这就是我所做的:

  • 由Xcode生成的文档类是我的顶级控制器。我不使用NSDocumentController。
  • 我的应用程序的每个用例都有许多NSViewControllers,它们管理用例的各种视图。这些控制器是动态交换进出的。顶级控制器由NSDocument类管理(在我使用核心数据的情况下,NSPersistentDocument)。

我绝不是专家,因此我会采取更好的方法进行纠正,但到目前为止,这种设置易于使用,易于维护且易于扩展。

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

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

来自Apple的EDIT2: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已有的各种架构并做出自己的选择。