如何在标题(.h)文件中动态设置静态“#define”变量?

时间:2011-05-22 23:25:42

标签: objective-c ios4 sharekit

我在iOS项目(sharekit)中使用了一个开源组件,他们在头文件中定义了静态变量。例如,在SHKConfig.h中,他们将应用名称定义为:

#define SHKMyAppName            @"My App Name"

我想做的是让这种动态;我不想在那个特定文件中对这些变量进行硬编码。由于头文件中显然没有viewDidLoad方法(据我所知),我怎么可能动态分配这个变量?

这甚至可能吗?

非常感谢你提前!!!

3 个答案:

答案 0 :(得分:3)

始终在代码编译期间评估

#define。您应该修改库以获得此功能。

另一种解决方案如下。使用

创建一个类Provider
+ (NSString *)getYourConstant;

方法并使用以下宏

#import "Provider.h"

#define kTheConstantYouNeed [Provider getYourConstant]

答案 1 :(得分:1)

您可以使用ifdef宏预处理器在编译时重新定义变量。你无法“改变那个变量”,因为它甚至不是一个变量。这是一个MACRO,用SHKMyAppName替换所有出现的@"My App Name

这是你能做的。使用您正在构建的项目名称定义编译器变量(您可以在XCode项目配置中执行此操作)。然后,将#define替换为:

#if defined(PROJECT_APP_01_BUILD)
#define SHKMyAppName @"My App 01"
#elif defined(PROJECT_APP_02_BUILD)
#define SHKMyAppName @"My App 02"
#elif defined(PROJECT_APP_03_BUILD)
#define SHKMyAppName @"My App 03"
#endif

这样,当您编译 App 01 时,宏SHKMyAppName将被@"My App 01"'. When you are compiling **App 02**, macro SHKMyAppName will be replaced by @“我的应用02”替换。等等,等等。

答案 2 :(得分:1)

您可以将这些定义移动到单个appinfo.h文件中,并将其包含在其他标题中。

这也可能是版本信息的好地方。

E.g。

在SHKConfig.h中:

#include "MyAppInfo.h"
#define SHKMyAppName    MyAppName // define MyAppName elsewhere

在MapAppInfo.h中:

#define MyAppName "Bla bla"


还是......

在SHKConfig.h中:

#define SHKMyAppName    MyAppName // define MyAppName elsewhere

在app的编译器设置中添加:

-DMyAppName=\"Bla bla\"