2009-12-16 7 views
1

J'essaie de comprendre comment passer une variable (dans mon cas hostname) à une fonction que j'ai créée à partir d'un élément de menu inséré par programmation.Cocoa Xcode - comment passer une variable à une fonction

#function 

-(void)goToTerminal:(NSString *)hostname { 
    NSString *s = [NSString stringWithFormat:@"tell application \"Terminal\" to do script \"ssh [email protected]%@\"", hostname]; 
    NSAppleScript *as = [[NSAppleScript alloc] initWithSource: s]; 
    [as executeAndReturnError:nil]; 
} 

# adding menu item in another function 
[NSString *hostname = [NSString stringWithString:@"some.host"]]; 
NSMenuItem *subhostline = [[[NSMenuItem alloc] initWithTitle:sshtohost action:@selector(goToTerminal:) keyEquivalent:@""]autorelease]; 
[subhostline setTarget:self]; 
+0

Je ne sais pas pourquoi quelqu'un a essayé de baisser la question - c'est une très bonne question! – bbum

+0

Juste une note, il y a une fuite de mémoire dans goToTerminal:, la variable as n'est jamais libérée (auto). –

Répondre

2

NSMenuItem a -tag et -setTag: méthodes qui peuvent être utilisées pour associer un nombre entier arbitraire avec un élément de menu. Cet entier pourrait facilement être l'index du nom d'hôte dans un tableau.

Les méthodes Cible/Action utilisent un seul argument, l'expéditeur. L'expéditeur est l'élément de l'interface utilisateur qui déclenche la méthode d'action sur la cible. Pour préserver la séparation inhérente à MVC, vous n'insérez généralement pas les données directement dans les éléments de l'interface utilisateur. l'interface utilisateur - la couche de vue - effectue une action contre un contrôleur qui sélectionne ensuite le morceau de données approprié dans le modèle et fait ce qu'il doit faire.

+0

gotya! Merci! ;-) –

Questions connexes