3

我正在创建一个具有两种文档类型的 NSDocument 应用程序:网站和 Web 服务。这是在我的 Info.plist 中:

<key>CFBundleDocumentTypes</key>
 <array>
  <dict>
   <key>CFBundleTypeName</key>
   <string>Website</string>
   <key>CFBundleTypeExtensions</key>
   <array>
    <string>website</string>
   </array>
   <key>LSTypeIsPackage</key>
   <true/>
   <key>CFBundleTypeRole</key>
   <string>Editor</string>
   <key>LSHandlerRank</key>
   <string>Default</string>
   <key>NSDocumentClass</key>
   <string>AWWebSite</string>
  </dict>
  <dict>
   <key>CFBundleTypeName</key>
   <string>Web Service</string>
   <key>CFBundleTypeExtensions</key>
   <array>
    <string>webservice</string>
   </array>
   <key>LSTypeIsPackage</key>
   <true/>
   <key>CFBundleTypeRole</key>
   <string>Editor</string>
   <key>LSHandlerRank</key>
   <string>Default</string>
   <key>NSDocumentClass</key>
   <string>AWWebService</string>
  </dict>
 </array>

现在,每当用户打开应用程序,从菜单栏中选择“新建”项,或者在没有打开的窗口时单击 Dock 图标,我想显示一个带有两个选项的窗口,每个选项对应一种文档类型。谁能帮我这个?谢谢

4

1 回答 1

5

你需要做的是覆盖- [NSDocumentController newDocument:]NSDocumentController是响应者链的一部分,是最终处理newDocument:它发送的消息的对象。

从那里,您可以显示您喜欢的任何对话框,然后调用makeUntitledDocumentOfType:error:、和。这就是这样做的。addDocument:makeWindowControllersshowWindowsopenUntitledDocumentAndDisplay:error:

但问题是这NSDocumentController是一个单例,因此您需要确保实例化的是您的子类,而不是 Apple 的。通常,您通过将子类的对象添加到 MainMenu.xib 或首先加载的任何 NIB 来执行此操作。这通常足以确保您的子类首先创建并成为单例。

于 2010-03-22T16:29:14.837 回答