2011-02-28 114 views

回答

68

如果你需要做的就是在可可的命令行参数,你可以这样做:

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

谢谢,但这只是从主功能确定?不像_NSGetArgc和_NSGetArgv可以在程序中的任何位置执行。 – iPadDevloperJr 2011-02-28 20:25:58

+1

是的 - 从任何地方(我不确定是什么让你觉得它可能不好?)。 – bbum 2011-02-28 21:02:00

7

由于这些函数的前缀为“_”,这通常表示它们是私有的,并且不打算由您使用。如果您需要获取命令行参数,更好的方法是查找NSProcessInfo。

+0

感谢我阅读这篇文章(http://unixjunkie.blogspot.com/2006/07/access-argc-and-argv-from-anywhere.html),我只是好奇这个功能和他们的能力从任何地方访问命令行参数。 – iPadDevloperJr 2011-02-28 20:01:30

+0

@Evariste是的,你可以在任何地方使用它。 NSProcess信息返回有关当前进程的信息。 – s73v3r 2011-03-01 01:08:38

24

您也可以访问使用NSUserDefaultsGreg MillerAlex Rozanski在相关博客文章中描述的命令行参数。

你基本上通过调用[NSUserDefaults standardUserDefaults]得到一个NSUserDefaults实例,然后使用诸如boolForKey:stringForKey:的消息来访问这些值。

官方Apple文档可以找到here

+1

我没有注意到这个答案,直到我自己找到了Alex Rozanski的帖子。任何一种描述的方法都是首选的?我倾向于使用NSUserDefaults,因为这样我不必解析参数并执行诸如确保值没有被省略的事情。我想确保没有理由不使用NSUserDefaults方法。 – GTAE86 2014-01-15 17:00:52

+0

我不知道是否有首选方法。然而,我使用这种方法来检查命令行选项是否存在,然后通过评估'objectForKey:'返回'nil'来使用它。示例代码可以在这里找到:https://github.com/mkroehnert/SaneKit/blob/master/Tools/scantool.m#L79 – MKroehnert 2014-01-18 09:50:34