3

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

#define SHKMyAppName            @"My App Name"

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

这甚至可能吗?

非常感谢您提前!!!

4

3 回答 3

4

#define总是在代码编译期间评估。您应该修改库以获得此功能。

另一种解决方案如下。创建一些Provider

+ (NSString *)getYourConstant;

方法并使用以下宏

#import "Provider.h"

#define kTheConstantYouNeed [Provider getYourConstant]
于 2011-05-22T23:30:25.537 回答
1

您可以使用ifdef宏预处理器在编译时重新定义变量。您无法“更改该变量”,因为它甚至不是一个变量。这是一个用 替换所有出现的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**, macroSHKMyAppName will be replaced by@"My App 02"'。依此类推,依此类推。

于 2011-05-22T23:28:53.227 回答
1

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

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

例如

在 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

并在应用程序的编译器设置中添加:

-DMyAppName=\"Bla bla\"
于 2011-05-22T23:30:50.267 回答