2011-02-28 154 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