Позвольте пользователю выбрать тип документа для открытия

Я создаю приложение NSDocument с двумя типами документов: веб-сайт и веб-сервис. Это в моем 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>
 </true></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>
 </true></dict>
 </array>

Теперь, когда пользователь открывает приложение, выбирает "Новый" элемент из строки меню или нажимает значок "Док", пока нет открытых окон, я хочу показать окно с двумя параметрами, каждое для одного из документов типы. Кто-нибудь может мне с этим помочь? Благодаря

1 ответ

Что вам нужно сделать, это переопределить - [NSDocumentController newDocument:]. NSDocumentController является частью цепи ответчика и является объектом, который в конечном итоге обрабатывает сообщение newDocument:, которое он отправляет.

Оттуда вы можете показать любой диалог, который вам нравится, а затем вызвать makeUntitledDocumentOfType:error:, addDocument:, makeWindowControllers и showWindows. Это то, что делает openUntitledDocumentAndDisplay:error:.

Но уловка заключается в том, что NSDocumentController является одноэлементным, поэтому вам нужно убедиться, что ваш подкласс создается экземпляром, а не Apple. Как правило, вы делаете это, добавляя объект вашего подкласса к MainMenu.xib или независимо от того, какой NIB загружается первым. Это обычно достаточно хорошо, чтобы убедиться, что ваш подкласс создается первым и становится синглоном.

licensed under cc by-sa 3.0 with attribution.