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?

Foi útil?

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]];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top