Pergunta

Estou criando um objeto com:

NSMenu *appMainMenu = [[NSMenu alloc] initWithTitle:@"MyApp"];

(Ignore o fato de que estou criando este menu programaticamente e não usando um arquivo NIB. Entendo as desvantagens de fazê -lo)

O menu aparece corretamente no Menubar.

No entanto, quando tento ligar para qualquer método de instância, como:

 [appMainMenu addItemWithTitle:@"MyTitle" action:@selector(myaction:) keyEquivalent:@"t"];

O Xcode oferece algumas conclusões, mas nenhuma parece vir do NSMENU.
Eu tentei os dois

#import <AppKit/AppKit.h> and #import <AppKit/NSMenu.h>

Os métodos de instância certamente estão lá no nsmenu.h e, como eu disse, ele instala meu menu. Ele simplesmente não instala o item de menu. Isso além da falta de conclusões me faz pensar que meu AppMainMenu não está sendo reconhecido como um objeto NSMENU, mesmo que seja obviamente válido.

Que coisa óbvia estou perdendo?

Foi útil?

Solução

Estou criando um objeto com:

NSMenu *appMainMenu = [[NSMenu alloc] initWithTitle:@"MyApp"];

Você deve alocá -lo de [NSMenu menuZone].

(É a mesma zona do padrão em 10.6.1, mas desde que a documentação diga que você deve usar [NSMenu menuZone], você provavelmente deveria usar [NSMenu menuZone].)

No entanto, quando tento ligar para qualquer método de instância, como:

[appMainMenu addItemWithTitle:@"MyTitle" action:@selector(myaction:) keyEquivalent:@"t"];

O Xcode oferece algumas conclusões, mas nenhuma parece vir do NSMENU.

Primeiro, é o Xcode, com uma minúscula c.

Tente salvar. Às vezes, o Xcode não percebe que eu criei uma variável até salvar o arquivo, provocando assim a reconstrução da qual as conclusões vêm.

Outras dicas

Começo criando um menu principal vazio e depois anexando os itens do menu:-

// I am also entirely unsure about the difference between
// using AppKit directly vs the Cocoa framework
#import <cocoa/cocoa.h>

// create an empty main menu and set it as the apps main menu
[NSApp setMainMenu:[[NSMenu alloc] init]];
// The first (sub)menu of the app menu is always the app menu and is named automatically
NSMenu* appMenu = [[NSMenu alloc] initWithTitle:@""];
// Now, add an about entry
[appMenu addItemWithTitle:@"About MyApp" action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""];

Isso funciona para mim.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top