我通过使用项目中多个位置的键字符串来访问存储在NSUserDefaults中的对象。为了避免在输入键字符串时出错,我想在全局设置。有可能??
[[NSUserDefaults standardUserDefaults] objectForKey:@"UD_GPS_LAST_UPDATE"];
答案 0 :(得分:6)
有不同的方法可以做到这一点。两种常用方法是使用全局NSString
常量或预处理器#define
指令。
一种流行的方法是使用全局变量。您需要将其添加到某个文件中。它可以是现有文件或单独文件。如果它存在,请确保它在@implementation
部分之外。它可能看起来像这样:
NSString *const MyStringConstantIdentifier = @"UD_GPS_LAST_UPDATE";
然后将带有extern
属性的相同标识符添加到您要在其中使用字符串常量的所有源文件中包含的头文件中。
extern NSString *const MyStringConstantIdentifier;
现在MyStringConstantIdentifier
将在所有使用它的地方引用相同的字符串。
[[NSUserDefaults standardUserDefaults] objectForKey:MyStringConstantIdentifier];
另一种方法是在头文件中使用预处理器#define
指令。确保在所有要使用标识符的源文件中包含头文件。
#define MyStringConstantIdentifier @"UD_GPS_LAST_UPDATE"
现在,当您包含该头文件MyStringConstantIdentifier
时,它将作为编写@"UD_GPS_LAST_UPDATE"
的快捷方式。然而,这将使预处理器的负担比编译器更重要。与使用全局变量的区别在于,当您使用
[[NSUserDefaults standardUserDefaults] objectForKey:MyStringConstantIdentifier];
预处理器实际上将MyStringConstantIdentifier
替换为@"UD_GPS_LAST_UPDATE"
,以便编译器处理的代码如下所示:
[[NSUserDefaults standardUserDefaults] objectForKey:@"UD_GPS_LAST_UPDATE"];
如果这可能是一个问题,那么部分代码是否会移动到库中。因为预处理发生在(实际上只是在你看待它的方式之前)编译时间,所以替换将在使用它的所有地方用字符串替换常量。假设这是在库中定义的。每当在库中更改字符串时,任何使用它的应用程序都必须重新编译。
答案 1 :(得分:1)
是的,这是可能的。
确实,这是使用所有常量字符串的最佳方式。
您可以使用以下内容创建GlobalConstantsAndKeys.h
文件
#define kUDGpsLastUpdate @"UD_GPS_LAST_UPDATE"
然后在整个项目中使用它。
[[NSUserDefaults standardUserDefaults] objectForKey:kUDGpsLastUpdate];
答案 2 :(得分:0)
是的,创建 example.h 文件并编写#define SEND_MESSAGE_ID @"2"
或者您想要的内容然后转到.pch文件并导入 example.h 来查看它在所有的应用程序。