Как динамически установить статическую переменную "#define" в файле заголовка (.h)? - PullRequest
3 голосов
/ 23 мая 2011

Я использую компонент с открытым исходным кодом в своем проекте iOS (sharekit), и они определили статические переменные в заголовочном файле. Например, в SHKConfig.h они определяют Имя приложения как:

#define SHKMyAppName            @"My App Name"

Что я хотел бы сделать, это сделать это динамичным; Я не хочу жестко кодировать эти переменные в этом конкретном файле. Поскольку в заголовочном файле явно нет метода viewDidLoad (насколько я знаю), как я могу динамически назначать эту переменную?

Это вообще возможно?

Большое спасибо заранее !!!

Ответы [ 3 ]

3 голосов
/ 23 мая 2011

#define всегда оценивается во время компиляции кода. Вы должны изменить библиотеку, чтобы получить эту функциональность.

Другое решение заключается в следующем. Создайте некоторый класс Provider с

+ (NSString *)getYourConstant;

метод и используйте следующий макрос

#import "Provider.h"

#define kTheConstantYouNeed [Provider getYourConstant]
1 голос
/ 23 мая 2011

Вы можете переместить эти определения в один файл appinfo.h и включить его в другие заголовки.

Это также может быть хорошим местом для информации о версии.

* 1005 Е.Г. *

В 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\"
1 голос
/ 23 мая 2011

Вы можете использовать макропроцессор 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

Таким образом, когда вы компилируете Приложение 01 , макрос SHKMyAppName будет заменен на @"My App 01"'. When you are compiling **App 02**, macro SHKMyAppName will be replaced by @ "Мое приложение 02 "'.И так далее, и тому подобное.

...