2011-02-28 13 views

Respuesta

68

Si todo lo que necesita hacer es obtener los argumentos de línea de comandos en Cocoa, se puede hacer:

NSArray *arguments = [[NSProcessInfo processInfo] arguments]; 
+2

Gracias, pero esto está bien desde la función principal? no desde ningún lugar en el programa como _NSGetArgc y _NSGetArgv puede hacer. – iPadDevloperJr

+1

Sí, desde cualquier lugar (no estoy seguro de qué le dio la impresión de que podría no estar bien?). – bbum

7

Como esas funciones llevan como prefijo un "_", eso suele ser una señal de que son privadas y no deben ser utilizadas por usted. Si necesita obtener los argumentos de línea de comando, una mejor forma de hacerlo sería buscar NSProcessInfo.

+0

Gracias estuve leyendo este artículo (http://unixjunkie.blogspot.com/2006/07/access-argc-and-argv-from-anywhere.html) y tengo curiosidad sobre estas funciones y su capacidad para acceder a los argumentos de línea de comando desde cualquier lugar. – iPadDevloperJr

+0

@Evariste Sí, puede usarlo en cualquier lugar. NSProcess info devuelve información sobre el proceso actual. – s73v3r

24

También puede acceder a los argumentos de línea de comandos utilizando NSUserDefaults como se describe en las entradas del blog por Greg Miller o Alex Rozanski.

Básicamente te dan una instancia NSUserDefaults a través de una llamada a [NSUserDefaults standardUserDefaults] y luego usar mensajes como boolForKey:stringForKey: o acceder a los valores.

La documentación oficial de Apple se puede encontrar en here.

+1

No me di cuenta de esta respuesta hasta después de haber encontrado la publicación de Alex Rozanski por mi cuenta. ¿Se prefiere alguno de los métodos descritos? Me inclino por utilizar NSUserDefaults porque de esa forma no tengo que analizar los argumentos y hacer cosas como asegurarme de que el valor no se haya omitido. Quiero asegurarme de que no haya alguna razón para no usar el método NSUserDefaults. – GTAE86

+0

No sé si hay un método preferido. Sin embargo, estoy usando este método para verificar si hay una opción de línea de comando antes de usarlo al evaluar si 'objectForKey:' devuelve 'nil'. El código de ejemplo se puede encontrar aquí: https://github.com/mkroehnert/SaneKit/blob/master/Tools/scantool.m#L79 – MKroehnert

Cuestiones relacionadas