2009-09-03 6 views
5

Je souhaite incorporer une applicationDidFinishLaunching: dans mon délégué cacao. Comment ferais-je cela ?? Sur l'iphone SDK, l'applicationDidFinishLaunching est déjà dans le délégué de l'application, mais lors de la création de mon application mac, j'ai remarqué qu'il n'y en avait pas.Délégué d'application - Cocoa

Cordialement,

Kevin

Répondre

6
- (id)init 
{ 
    if (self = super init]) { 
     [NSApp setDelegate:self]; 
    } 
    return self; 
} 

Vous pouvez aussi le faire dans Interface Builder; à partir de "File's Owner" dans MainMenu.xib, faites simplement glisser la sortie "delegate" vers votre objet. Toutefois, vous pouvez envisager d'utiliser -awakeFromNib à la place.

+2

Il vous manque un support d'angle autour de 'super init' et vous ne mentionnez pas que la méthode' applicationDidFinishLaunching: 'doit être mis en œuvre par la classe ssame pour le faire fonctionner. – MKroehnert

20

À partir de Xcode 3.2, le modèle d'application Mac est également livré avec un délégué d'application, déjà connecté, qui possède une telle méthode.

Pour le configurer dans un projet créé avant Xcode 3.2, créez une nouvelle classe pour votre délégué comme instance. Je nomme habituellement le mien "AppDelegate". Pour ce faire, cliquez avec le bouton droit de la souris sur le groupe Classes et choisissez "Ajouter un fichier", puis choisissez le modèle de fichier de sous-classe Cocoa NSObject.

Ouvrez l'en-tête que vous venez de créer (AppDelegate.h). Donnez-lui les variables d'instance que vous voulez. Puis cliquez sur Aller à Counterpart. Cela vous amène au fichier d'implémentation (AppDelegate.m). Ajoutez votre méthode d'instance applicationDidFinishLaunching: ici. Contrairement à l'iPhone, il s'agit d'une méthode de gestionnaire de notification. Il prend donc une instance NSNotification et non une instance NSApplication.

Maintenant, pour le brancher. Dans le groupe Ressources, ouvrez MainMenu.nib. Faites glisser un objet de la fenêtre de la bibliothèque dans la fenêtre de la plume de niveau supérieur (celle avec des icônes, comme le propriétaire du fichier et le premier répondeur). Sélectionnez l'objet que vous venez de créer et ouvrez l'inspecteur d'identité. Définissez la classe de l'objet sur AppDelegate, en faisant correspondre le nom que vous avez utilisé dans Xcode. Cliquez avec le bouton droit sur le propriétaire du fichier et faites-le glisser depuis sa sortie delegate vers votre nouvel objet.

Dans Xcode, ajoutez une instruction NSLog à votre méthode applicationDidFinishLaunching:. Hit Enregistrer tout, puis Build and Go. Revenez à Xcode et ouvrez la console du débogueur. Si vous avez tout fait correctement et que je n'ai rien oublié, vous devriez voir le message du journal.

+0

'le modèle d'application Mac est également livré avec un délégué d'application, déjà connecté, qui a une telle méthode.» Pas pour les applications basées sur des documents ... – zakdances

+0

@yourfriendzak: Bon point. Si vous souhaitez ajouter un délégué d'application à une application basée sur un document (pour une raison quelconque), vous devez suivre le reste des instructions. –

0

Les fichiers de délégation d'application vous manquaient-ils complètement? Il semble qu'il y ait un bug dans les scripts d'installation de Xcode (au moins pour 3.2.1 sur Snow Leopard) qui installe les derniers modèles de projet dans le mauvais dossier. Le modèle plus ancien pour un projet "Application Cocoa" ne contient pas les fichiers de délégué.

J'ai expliqué ce que j'ai découvert (et comment je l'ai "réparé") dans un billet de blog appelé Fixing the Xcode Project Templates.

Cheers, Graham