使用Obj-C中的用户名定义全局常量

时间:2012-07-19 20:50:03

标签: objective-c cocoa

我想定义一个包含任何用户名的常量文件路径(例如/Users/username/Desktop ...在我的特定情况下,它是我在/var/spool/FolderICreate/username创建的目录。

声明此常量的最佳方法是什么,以便我的其他类可以识别它?我目前有一个globals.h文件,包含需要查看全局变量的类,但我不知道如何设置值。 #define显然需要一个硬编码的字符串文字,我不确定我是否可以或如何使用extern const NSString*设置字符串。我觉得这应该不难,但我不知所措。

- 编辑 -

正如人们正确指出的那样,我的代码是不必要的,因为我可以使用NSUserName等获取用户名,所以我删除了它。但我认为人们忽略了我的问题。我可以看到有多种方法可以获取我想要的路径名 - 如何将其声明为常量?

4 个答案:

答案 0 :(得分:3)

对于你修改过的问题,正如凯琳所说,你不想要一个常数。 C中的常量是在编译时定义的,并且您不知道编译时该值是什么。

您不希望出现此问题的变量。你想要一个静态函数。基金会提供许多可以做与您想要的相似的事情。如果您想要其他内容,请创建自己的静态函数MYDirectoryForStuff()

不要创建非常量全局变量。那种方式就是疯狂。然后,您必须验证它们在使用之前已初始化,这会导致各种微妙的错误。如果使用静态函数,则可以轻松进行自我初始化。

答案 1 :(得分:2)

在重新实现Foundation框架中已经提供的一系列功能之前,请先查看NSPathUtilities。你可以找到一些特别针对你想要做的方法。

要回答你实际问过的问题,没有简单的方法可以将变量声明为常量,然后在运行时更改其值...这种方法无法告诉编译器它是常量。只需将头文件中的变量声明为extern NSString *,并仅将其设置一次。 : - )

答案 2 :(得分:2)

您永远不应该假设用户的主文件夹可能位于何处。

检索当前用户主文件夹路径的正确方法是

NSHomeDirectory()

如果您想访问用户主文件夹的其中一个标准子文件夹,请不要对其位置做任何假设,但请使用

NSSearchPathForDirectoriesInDomain()

检索它们。例如,要获取文档文件夹:

NSArray *searchPaths = NSSearchPathForDirectoriesInDomain(
    NSDocumentDirectory, 
    NSUserDomainMask, 
    YES
);
NSLog(@"The documents folder is at %@", [searchPaths objectAtIndex:0]);

答案 3 :(得分:0)

Foundation框架具有以下功能:NSUserName()