2010-03-22 13 views
3

Je crée une application NSDocument avec deux types de document: Site Web et Service Web. Ceci est dans mon Info.plist:Permet à l'utilisateur de choisir le type de document à ouvrir

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

Maintenant, chaque fois que l'utilisateur ouvre l'application, permet de sélectionner l'élément « Nouveau » de la barre de menus, ou clique sur l'icône du Dock alors qu'il n'y a pas de fenêtres ouvertes, je veux montrer une fenêtre avec deux options, chacune pour l'un des types de document. Est-ce que quelqu'un peut m'aider avec ça? Merci

+0

Je suppose que vous devrez peut-être sous-classer NSDocumentController et remplacer la méthode newDocument: afin de présenter votre fenêtre avec ces options. Vous pouvez consulter le document d'Apple sur les applications basées sur des documents. http://developer.apple.com/Mac/library/documentation/Cocoa/Conceptual/Documents/Tasks/SubclassController.html – zonble

Répondre

5

Ce que vous devez faire est de remplacer - [NSDocumentController newDocument:]. NSDocumentController fait partie de la chaîne du répondeur et est l'objet qui finit par gérer le message newDocument: qu'il envoie.

À partir de là, vous pouvez montrer tout dialogue que vous aimez et puis appelez makeUntitledDocumentOfType:error:, addDocument:, makeWindowControllers et showWindows. C'est ce que fait openUntitledDocumentAndDisplay:error:.

Mais le problème est que NSDocumentController est un singleton, vous devez donc vous assurer que c'est votre sous-classe qui est instanciée, pas celle d'Apple. En général, vous le faites en ajoutant un objet de votre sous-classe à MainMenu.xib ou à tout autre fichier NIB chargé en premier. C'est généralement assez bon pour s'assurer que votre sous-classe est créée en premier et devient le singleton.

+0

Merci beaucoup! J'obtiens ceci fonctionnant pour l'élément de menu mais pas l'icône de dock et le démarrage d'application = [ –

+2

Vous pourriez substituer 'openUntitledDocumentAndDisplay: error:' à la place; Je crois que c'est ce qui est appelé lorsque vous cliquez sur l'icône du Dock et lorsque l'application démarre. – Alex