Tengo algunas dificultades reales con la programación inicial de Cocoa que estoy llevando a cabo.¿Forma correcta de configurar el objetivo/acción para NSMenuItem en Cocoa?
Básicamente, tengo un artículo NSStatusBar
con un NSMenu
adjunto como menú. El menú tiene un solo NMMenuItem
. En IB, he conectado NSMenuItem a un NSObject
, que está configurado en la clase ApplicationDelegate; Luego configuré las Acciones Recibidas en un método IBAction
en ApplicationDelegate. Todo está conectado correctamente. Creo que, excepto cuando ejecuto el programa y hago clic en el elemento del menú, no se llama al método IBAction
. Realmente no puedo resolverlo. Aquí está el código relevante.
Aplicación archivo Delegado h:
#import <Cocoa/Cocoa.h>
@interface sssAppDelegate : NSObject <NSApplicationDelegate> {
IBOutlet NSMenu *statusMenu;
NSStatusItem *statusItem;
}
- (IBAction)showPreferencePanel:(id)sender;
@end
Aplicación Delegado m archivo:
#import "sssAppDelegate.h"
@implementation sssAppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
}
-(void)awakeFromNib{
statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength] retain];
[statusItem setMenu:statusMenu];
[statusItem setTitle:@"Status"];
[statusItem setHighlightMode:YES];
}
- (IBAction)showPreferencePanel:(id)sender {
NSLog(@"Hello World!");
}
@end
Como digo, en IB He conectado el NSMenu
a statusMenu
en el Delegado de aplicación (por lo tanto el menú de todos aparece bajo NSStatusBar
), y he conectado un NSMenuItem
dentro del NSMenu
con el NSObject
con la clase Delegado de aplicaciones, y lo conecté t o llame a showPreferencePanel, pero no pasa nada cuando lo ejecuto !!!
Lo probé programáticamente también, pero todavía no se puede llamar al método IBAction.
Editar: Adjuntaré algunas capturas de pantalla para mostrar la configuración en IB pero aún no estoy autorizado.
La punta principal que contiene el menú que se agrega a la NSStatusBar
, que se parece a esto:
- FO
NSApplication
- FR
FirstResponder
- Aplicación
NSApplication
- Administrador de fuentes
NSFontManager
- Menú principal
NSMenu
- de elementos del menú (Preferencias)
NSMenuItem
- de elementos del menú (Preferencias)
- Sss App Delegado
sssAppDelegate
NSMenuItem:
- acciones Enviados -
showPreferencePanel
--->Sss App Delegate
Sss App Delegado:
- Outlets -
statusMenu
--->Main Menu
- acciones recibidas -
showPreferencePanel:
--->Main Item (Preferences)
Menciona que ha creado un objeto con la clase del delegado de la aplicación en el plumín; ¿Es esta punta el mismo en el que designó el objeto como el delegado de la aplicación? Si no, me pregunto si ha creado dos objetos delegados de aplicación por accidente, lo que causa problemas (no este) porque solo uno de ellos puede ser realmente el delegado a la vez. –
¿Ha intentado iniciar sesión en el menú, sus elementos de menú y el elemento en cuestión y la acción? (Use 'NSStringFromSelector' para convertir el selector de acciones en un NSString.) –
Gracias por los comentarios, he agregado algo más a la pregunta que con suerte aclarará un poco las cosas. – Edwardr