2015-08-23 2 views
1

Mon application basée sur les documents comporte un menu Dock avec un élément "Nouveau document". Le menu du dock est fait dans Interface Builder, l'action de l'élément correspondant est connecté à -newDocument:L'option de menu "Nouveau document" de l'application basée sur le document n'ouvre pas le nouveau document

de « First Responder Le contrôleur de document est une sous-classe de NSDocumentController appelé DocumentController.

Dans le délégué de l'application de ce code est utilisé pour empêcher l'ouverture d'un document sans titre lors de son lancement (au lieu du contrôleur de document ouvert panneau de s'affiche):

- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender { 

    [(DocumentController *)[NSDocumentController sharedDocumentController] openDocument:self]; 
    return NO; 

} 

Si je lance maintenant mon application, il va affiche le panneau ouvert au lieu d'un document sans titre. Si je clique ensuite sur l'élément «Nouveau document» du menu Dock, aucun nouveau document ne s'ouvre. Si je clique sur l'option de menu Fichier standard 'Nouveau document' dans le menu principal du modèle, un nouveau document s'ouvre.

Je ne peux pas penser à une raison pour laquelle c'est ainsi, pouvez-vous? Comment puis-je obtenir le menu Dock pour ouvrir un nouveau document?


EDIT: Here is a sample project which has no NSDocumentController subclass but still has the same problem.

Répondre

1

appelle élément de menu Méthode NewDocument sur le contrôleur de document. Si vous cliquez sur le dock, vous déclenchez des tâches NSApplication et c'est un délégué. Par exemple. Si vous avez une fenêtre d'application existante, vous ne serez pas appelé ici. Aucune fenêtre ne déclenche applicationShouldOpenUntitledFile

Dans votre document override contrôleur comme ceci:

- (id)openUntitledDocumentAndDisplay:(BOOL)displayDocument error:(NSError *__autoreleasing *)outError { 
    [self openDocument:nil] 
} 

Et au lieu de répondre à appdelegate (devrait bla bla) faire si vous voulez après le lancement pour afficher openPanel. Si vous voulez déclencher lorsque l'utilisateur clique sur l'icône, puis faire la deuxième méthode

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
    [(DocumentController *)[NSDocumentController sharedDocumentController] openDocument:nil]; 
} 

- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender { 
    return YES; 
} 

The action of the File menu's New item in a document-based application. The default implementation of this method invokes -openUntitledDocumentAndDisplay:error: and, if nil is returned, presents the error in an application-modal panel.

  • (IBAction)newDocument:(id)sender;
+0

qui ouvre le panneau ouvert à chaque fois que l'utilisateur souhaite créer un nouveau document. Ce que je veux accomplir est d'afficher un panneau ouvert au lancement, puis l'utilisateur peut cliquer sur 'Nouveau document' dans mon dock ou menu de fichier pour créer un document sans titre (tandis que le panneau ouvert disparaît). Tout fonctionne, sauf le menu Dock - pour une raison quelconque, il n'appelle jamais '-newDocument:' –

+0

Votre exemple de projet fonctionne. Je clique sur l'icône du dock et j'appuie sur le nouveau document-> il ouvre une nouvelle fenêtre de document. Lorsque le panneau ouvert est affiché, il n'ouvre pas de nouvelle fenêtre parce que vous êtes dans un autre cycle (runloop de openpanel). –

+0

Merci pour l'aide, lorsque le panneau ouvert est affiché, l'élément 'Fichier> Nouveau document' fonctionne mais l'icône équivalente que j'ai mise dans le dock ne fonctionne pas, est-ce dû à un autre cycle? –