我正在创建一个nsdocument应用程序,它有两种文档类型:web站点和web服务。这是我的信息列表:

<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>

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

最佳答案

您需要做的是覆盖- [NSDocumentController newDocument:]NSDocumentController是响应程序链的一部分,是最终处理其发送的newDocument:消息的对象。
从那里,您可以显示您喜欢的任何对话框,然后调用makeUntitledDocumentOfType:error:addDocument:makeWindowControllersshowWindows。这就是openUntitledDocumentAndDisplay:error:的作用。
但是捕获的是NSDocumentController是一个单体,所以你需要确保它是实例化的子类,而不是Apple。通常,你这样做是通过将你的子类的一个对象添加到MeMeNUIXIB或者任何NIB首先被加载。这通常是足够好的,以确保您的子类首先创建并成为单体。

10-05 21:48