2010-06-25 4 views

Répondre

11

Neat chose: utiliser NSUserDefaults.

Si vous faites:

./MyCocoaApp -argument /path/to/file.txt 

Ensuite, dans votre code que vous pouvez faire:

NSDictionary * arguments = [[NSUserDefaults standardUserDefaults] volatileDomainForName:NSArgumentDomain]; 
NSString * path = [arguments objectForKey:@"argument"]; 

Le key est le commutateur -argument, et la valeur est la chose qui vient après. Notez que ceci n'est pas très flexible (vous ne pouvez pas faire d'options combinées: -a -l-al), mais pour les arguments rudimentaires, c'est très simple.

modifier avec de multiples arguments:

./MyCocoaApp -arg1 42 -arg2 "Hello, world!" -arg3 /path/to/file.txt 

Et puis extrait via:

... = [arguments objectForKey:@"arg1"]; 
... = [arguments objectForKey:@"arg2"]; 
... = [arguments objectForKey:@"arg3"]; 
+0

ok, tout d'abord merci beaucoup. et si la ligne de commande avec deux ou trois arguments, et comment l'utiliser, merci encore! – jin

+0

@jin a modifié sa réponse –

+0

+1 Tour cool! –

1

La fonction principale normale dans Cocoa passe les arguments de ligne de commande pour NSApplicationMain. Les arguments sont ignorés par NSApplicationMain, mais vous êtes libre de les analyser au besoin. Il existe plusieurs méthodes standard pour analyser les arguments de ligne de commande, comme getopt, ou vous pouvez simplement accéder aux valeurs directement.

int main(int argc , char **argv) { 
    if (argc == 2) gPathArgument = argv[1]; 
    NSApplicationMain(argc , argv); 
} 

Notez que des services de lancement peuvent passer des arguments de ligne de commande lorsqu'une application est ouverte normalement, par exemple lors d'un double clic dans le Finder. Veillez à gérer les arguments non reconnus.

Dans le cas particulier d'un chemin de fichier à un fichier existant, vous pouvez utiliser open comme ceci:

open -a /path/to/your.app /path/to/the/file 

Et puis mettre en œuvre dans votre délégué de l'application:

- (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename; 
Questions connexes