Я не смог найти способ заставить IB понять структуру, которую вы используете (я пытался сделать это с помощью платного / бесплатного приложения, которое я делал в прошлом). Вот как я решаю свою проблему:
Я не использовал условную компиляцию в своем определении @interface. Я просто определил класс как нормальный, как если бы это была платная, не рекламная версия. Давайте назовем это MyPaidViewController.
@interface MyPaidViewController : UIViewController <UIActionSheetDelegate> {
Затем я создал подкласс MyPaidViewController, который был для бесплатной версии. Что-то вроде:
@interface MyFreeViewController : MyPaidViewController <ADBannerViewDelegate> {
Поскольку для моей бесплатной версии мне обычно требовалось использовать другой xib, нежели я использовал для моей платной версии (поскольку мне приходилось перемещать вещи, чтобы освободить место для рекламы), я бы просто использовал платный xib, используя MyPaidViewController в качестве Владелец файла и мой бесплатный xib используют MyFreeViewController в качестве владельца файла.
Интерфейсный конструктор будет видеть IBOutlets и из суперклассов, поэтому вы сможете ссылаться на myLabel в своем бесплатном xib.
Убедитесь, что MyPaidViewController является частью платных и бесплатных целей сборки, но MyFreeViewController должен быть только частью бесплатной цели сборки.