Условная компиляция и Objective-C / Xcode - PullRequest
2 голосов
/ 14 декабря 2010

Итак, я работаю над учебным проектом и пытаюсь создать заголовочный файл, который содержит хранилище URL-адресов, так что вы можете просто изменить один флаг, чтобы перейти от Debug к Production. Это то, что я пытаюсь сделать с компилятором, и это явно неправильно. Я не могу найти никакой информации о том, как это сделать в Objective-C, поэтому я и пришел сюда.

#define DEBUG 1
#if DEBUG
  NSString *URL = @"dev.myserver.com";
#else
  NSString *URL = @"myserver.com";
#endif

@interface GlobalURLRefrences : NSObject {
  //NSString *URL; removed this
}

//@property (nonatomic, retain) NSString *URL; removed this

@end

Теперь я не уверен, нужно ли мне объявлять это как собственность или нет. Кроме того, как только это скомпилировано должным образом, как получить к нему доступ из внешнего класса (конечно, после того, как вы #import класс globalURL) Любое руководство по правильному способу выполнения этого будет очень признательно.

Ответы [ 3 ]

11 голосов
/ 14 декабря 2010

Джефф: мне нужно такое условие в моем приложении Mac App Store для проверки квитанций, и я делаю это с отдельной конфигурацией сборки и флагом -D. В конфигурации отладки добавьте флаг компилятора что-то вроде -DDEBUG_BUILD (обратите внимание на двойной D в начале и без пробела.) И затем используйте

#ifdef DEBUG_BUILD
    #define SERVER_URL_STRING @"http://dev.myserver.com"
#else
    #define SERVER_URL_STRING @"http://myserver.com"
#endif

Таким образом, вам не нужно поменять местами #define при каждой сборке для производства. (Вы забудете в конце концов. У всех есть.) -Если вы сделаете это таким образом, то вам также не понадобится декларация @property или ivar.

0 голосов
/ 14 декабря 2010

Я думаю, вы пытаетесь определить одну и ту же переменную дважды. Как насчет этого:

В вашем заголовке:

#define DEBUG 1

В инициализации вашего файла .m:

#if DEBUG
   URL = @"dev.myserver.com";
#else
   URL = @"myserver.com";
#endif
0 голосов
/ 14 декабря 2010

Я думаю, что это должно работать

#define DEBUG 1
#if DEBUG
   #define URL = @"dev.myserver.com";
#else
   #define URL = @"myserver.com";
#endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...