Как я могу использовать разные .h файлы для нескольких целей? - PullRequest
2 голосов
/ 26 июля 2010

У меня есть проект с несколькими целями. Для большинства моих классов я могу использовать один файл .h и изменить детали в файле .m (добавив отдельный файл .m для каждой цели).

Для одного из моих UIViewController подклассов мне нужно объявить разные UILabel IBOutlet s для разных целей (каждая цель показывает различный набор меток в зависимости от того, что доступно). Проблема в том, что заголовочные файлы не могут быть ориентированы. Рядом с ними нет флажков для указания целевого членства.

Способ, которым я имел дело с этим, состоит в том, чтобы просто добавить выходы для всех целей и игнорировать неиспользуемые. Это не кажется идеальным.

Нужно ли для этого использовать фазу сборки заголовка? Какой лучший способ справиться с этой проблемой? Спасибо.

Редактировать: Я должен был упомянуть, что хочу, чтобы все файлы .h имели одинаковое имя: PlaceViewController.h.

Ответы [ 3 ]

3 голосов
/ 26 июля 2010

Вы можете использовать директивы препроцессора для выборочного включения заголовочных файлов. Например

#if TARGET_OS
   #import "FirstTarget.h"
#else
   #import "SecondTarget.h"
#endif

Вы можете использовать разные папки для разных целей, если заголовки имеют одинаковые имена:

#if TARGET_OS
   #import "First/Target.h"
#else
   #import "Second/Target.h"
#endif

Подробнее о условных выражениях можно прочитать здесь .

1 голос
/ 26 июля 2010

Заголовки не компилируются сами по себе, но включаются в другие файлы, которые затем компилируются.Вы можете использовать условную компиляцию внутри этих файлов, чтобы включить правильные заголовки для цели.Определите уникальный символ в символах препроцессора для каждой цели и включите соответствующие заголовки соответственно:

#if defined(TARGET_ONE)
#include "HeaderOne.h"
#elif defined(TARGET_TWO)
#include "HeaderTwo.h"
#endif
0 голосов
/ 23 апреля 2014

Извините, что отвечаю на пару лет позже, но у меня недавно была такая же проблема, и есть способ сделать это:

  • Допустим, вы уже создали новую цельдублируя исходную цель.Щелкните правой кнопкой мыши первый (оригинальный) файл .h в Project Navigator и откройте файл в Finder.
  • В Xcode щелкните файл правой кнопкой мыши и удалите его из проекта (удаляйте только ссылки, не перемещайте в корзину).
  • В Finder создайте две папки (в одной папке не может быть двух файлов с одинаковыми именами) и переместите / скопируйте исходный файл .h в обе.
  • Теперь перетащите первую папку куда-нибудь в вашем проекте, и когда появится окно с целями, выберите только первую цель.
  • То же самое со второй папкой, выберите только вторую цель.

Вуаля, теперь у вас должно быть два файла .h с тем же именем

Предостережения: кажется, что Xcode имеет случайные проблемы, если ваш файл .h имеет NS_ENUM.Возможно, это решаемо, но я до сих пор не понял.

...