3

我正在使用项目中多个位置的键字符串访问存储在 NSUserDefaults 中的对象。为避免在键入密钥字符串时出现错误,我想在全局中设置。可能吗 ??

[[NSUserDefaults standardUserDefaults] objectForKey:@"UD_GPS_LAST_UPDATE"];
4

3 回答 3

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"];

如果您的部分代码曾经移动到库中,这可能会成为问题。因为预处理发生在(实际上就在之前取决于你如何看待它)编译时,替换将在所有使用它的地方用字符串替换常量。假设这是在库中定义的。每当库中的字符串发生更改时,任何使用它的应用程序都必须重新编译。

于 2013-04-15T13:27:49.570 回答
1

对的,这是可能的。

事实上,这是使用所有常量字符串的最佳方式。

GlobalConstantsAndKeys.h您可以使用以下和其他人创建文件

#define kUDGpsLastUpdate @"UD_GPS_LAST_UPDATE"

然后在整个项目中使用它。

[[NSUserDefaults standardUserDefaults] objectForKey:kUDGpsLastUpdate];
于 2013-04-15T13:24:14.497 回答
0

是的,创建example.h文件并写入#define SEND_MESSAGE_ID @"2"或您想要的任何内容,然后转到 .pch 文件并导入example.h以在所有应用程序中查看它。

于 2013-04-15T13:26:43.153 回答