2009-09-03 10 views
5

Quiero incorporar una aplicaciónDinFinishLaunching: en mi delegado de cacao. ¿Cómo haría esto? En el SDK de iphone, el applicationDidFinishLaunching ya está en el delegado de la aplicación, pero al hacer mi aplicación mac noté que no había ninguno.Delegado de aplicación - Cocoa

Best Regards,

Kevin

Respuesta

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

También puede hacer esto en el Interface Builder; desde "Propietario del archivo" en MainMenu.xib, simplemente arrastre la salida "delegado" a su objeto. Sin embargo, es posible que desee considerar el uso de -awakeFromNib.

+2

le falta algún soporte en ángulo alrededor 'súper init' y no mencionan que el método' applicationDidFinishLaunching: 'debe ser implementada por la clase ssame para hacer que funcione. – MKroehnert

20

A partir de Xcode 3.2, la plantilla de la aplicación Mac también viene con un delegado de aplicación, ya conectado, que tiene dicho método.

Para configurar esto en un proyecto creado antes de Xcode 3.2, cree una nueva clase para que su delegado sea una instancia de. Usualmente nombre el mío "AppDelegate". Hará esto haciendo clic con el botón derecho en el grupo Clases y eligiendo "Agregar archivo", luego escogiendo la plantilla del archivo Subclass Cocoa NSObject.

Abra el encabezado que acaba de crear (AppDelegate.h). Dale cualquier variable de instancia que desees. Luego presiona Ir a Counterpart. Eso lo lleva al archivo de implementación (AppDelegate.m). Agregue aquí su método de instancia applicationDidFinishLaunching:. A diferencia del iPhone, este es un método de manejo de notificaciones, por lo que requiere una instancia NSNotification y no una instancia NSApplication.

Ahora para conectarlo. En el grupo de Recursos, abra MainMenu.nib. Arrastre un Objeto desde la ventana Biblioteca a la ventana de punta de nivel superior (la que tiene iconos, como Propietario de Archivo y Primer Respondedor). Seleccione el objeto que acaba de crear y abra el inspector de identidad. Establezca la clase del objeto en AppDelegate, que coincida con el nombre que utilizó en Xcode. Haga clic derecho en el propietario del archivo y arrastre desde su toma delegate a su nuevo objeto.

En Xcode, agregue una declaración NSLog a su método applicationDidFinishLaunching:. Presione Guardar todo, luego compilar y avanzar. Vuelve a Xcode y abre la consola del depurador. Si hiciste todo bien y no me olvidé de nada, deberías ver el mensaje de registro allí.

+0

'la plantilla de la aplicación Mac también viene con un delegado de aplicación, ya conectado, que tiene dicho método. No para aplicaciones basadas en documentos ... – zakdances

+0

@yourfriendzak: Buen punto. Si desea agregar un delegado de la aplicación a una aplicación basada en documentos (por alguna razón), deberá seguir el resto de las instrucciones. –

0

¿Echas de menos los archivos de delegado de la aplicación? Parece que hay un error en los scripts de instalación de Xcode (al menos para 3.2.1 en Snow Leopard) que instala las últimas plantillas de proyecto en la carpeta incorrecta. La plantilla anterior para un proyecto de "Aplicación Cocoa" no contiene los archivos delegados.

He explicado lo que descubrí (y cómo lo "arreglé") en una publicación de blog llamada Fixing the Xcode Project Templates.

Saludos, Graham

Cuestiones relacionadas