8

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

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

4

1 回答 1

10

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

在此处输入图像描述

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

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

我绝不是专家,所以我坚持纠正更好的方法,但到目前为止,这个设置很容易使用、易于维护和易于扩展。

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

编辑:这篇文章解释了 NSDocumentController 的相关性。

EDIT2: Apple 的这本书也很有趣。

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 现有的各种架构并做出自己的选择。

于 2012-04-29T22:03:07.037 回答