Como ter um NSMenu com ações dinâmicas
Pergunta
Quero criar um NSMenu com uma opção semelhante à opção Enviar para que você encontrará no Windows Explorer, onde listará os dispositivos anexados para os quais você pode enviar o arquivo.
Pela minha pesquisa parece que não é possível definir um seletor que envie um parâmetro para a função também, então não é o caso de ter @selector(@"sendToVolume:1")
.Então, de que outra forma eu poderia fazer com que o menu executasse uma tarefa diferente com base no item clicado quando o número de itens é desconhecido?
Solução
Nsmenuitem tem a representedObject
Propriedade, que pode ser usada para armazenar o que você quiser, como uma referência ao destino que o item representa.
Quando o seletor é invocado, você pode recuperar o objeto representado:
-(IBAction)sendTo:(id)sender {
id destination = [sender representedObject];
}
Outras dicas
Mas você pode usar seletores com parâmetros! NSObject
tem três métodos definidos assim:
-performSelector:
-performSelector:withObject:
-performSelector:withObject:withObject:
Agora, o primeiro é como ter @selector(someMethod:)
, mas os dois últimos são usados para enviar parâmetros ao seletor.Por exemplo:
-(void)sendToVolume:(NSNumber)nr {
//do stuff
}
então você poderia usá-lo assim:
[appController performSelector:@selector(sendToVolume:)
withObject:[NSNumber numberWithInt:1]];