Xcode如何设置基于文档的应用程序?

Ben*_*ale 8 xcode cocoa xcode3.2

我正在学习Cocoa,通过阅读文档我的理解是,当应用程序启动时会发生以下情况:

  1. 创建共享应用程序实例.
  2. 从应用程序属性列表中查找主nib文件,以便应用程序知道要加载哪个nib.
  3. 运行循环开始.

这很好,对单个窗口应用程序有意义但是我对创建基于文档的应用程序时xcode的作用感到困惑.

在这种情况下,有两个nib文件; 第一个包含应用程序菜单,第二个包含表示NSDocument子类的窗口.当我运行应用程序时,会自动打开一个新的文档窗口.

基于我对上面概述的应用程序如何工作的理解,我不明白我的应用程序在从属性列表中查找菜单笔尖后如何知道打开文档窗口.据我所知,没有生成代码来执行此操作(除了windowNibName方法,但是从哪里调用?)

任何人都可以告诉我xcode的不同之处,以便应用程序知道它是基于文档的,因此需要打开文档窗口吗?

更新:

我想要了解的是,如果我的应用程序被设置为基于文档的应用程序而不是单个窗口应用程序,Xcode如何知道如何做一些不同的事情.据我所知,没有设置来指定这个,Xcode似乎没有生成任何代码来提供这种不同的行为.

通过阅读过去几天的文件,我我知道这是如何工作但不确定:

  1. _NSApplication_具有委托方法applicationOpensUntitledFile,由应用程序委托调用.
  2. NSDocumentController默认设置为应用程序委托,默认实现查找CFBundledTypeInfo的存在,以确定文档是否基于文档,并根据应用程序进行响应(基于文档的应用程序为IE YES,单窗口为NO)应用程序).
  3. 在创建单个窗口应用程序的大部分时间,应用程序委托被自定义的AppController替换,通常不会包含applicationOpenUntitledFile方法的定义,因为它不适合应用程序的类型.

希望任何Cocoa专家都可以确认我的理解是否正确,或者我是否正在咆哮错误的树.

jtb*_*des 5

在创建基于文档的应用程序时,您会得到以下几点:

  • NSDocument的子类
  • 除MainMenu.xib之外,此文档的新xib文件
  • Info.plist中的CFBundleDocumentTypes条目,它告诉应用程序您的NSDocument子类

当您的应用程序打开时,共享的NSDocumentController将使用CFBundleDocumentTypes信息创建一个新的无标题文档.

有关更多信息,请阅读基于文档的应用程序项目模板和其他基于文档的应用程序指南.