Как я могу условно объявить делегата в объявлении интерфейса? - PullRequest
6 голосов
/ 01 июля 2011

У меня есть проект Xcode 4, который строится на двух разных целях. Я определил некоторые константы в настройках сборки, чтобы я мог запускать различный код для каждой цели, например:

#ifdef VERSION1
// do this
#else
// do that
#endif

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

#ifdef VERSION2
#import "SpecialViewController.h"
#endif

@interface MainViewController : UIViewController <MPMediaPickerControllerDelegate, SpecialViewControllerDelegate> {
// etc.

Условие вокруг тега #import работает нормально, но как я могу объявить этот класс как SpecialViewControllerDelegate в одной версии, но не в другой?

Ответы [ 2 ]

10 голосов
/ 01 июля 2011

Просто используйте директиву препроцессора #define для изменения делегатов между версиями.Вот пример для "VERSION2".

#ifdef VERSION2
#import "SpecialViewController.h"
#define ARGS PMediaPickerControllerDelegate, SpecialViewControllerDelegate 
#endif

@interface MainViewController : UIViewController <ARGS>
1 голос
/ 01 июля 2011

Пока вы не назначаете делегата, все будет в порядке, выходя из реализации.Ваш SpecialViewController в VERSION1 (если у вас даже есть SpecialViewController в V1) не будет иметь делегата, поэтому его вызовы никуда не денутся, что не должно привести к побочным эффектам.

#ifdef VERSION2
specialViewController.delegate = self;
#endif

Если этот подход не работает, похоже, у вас должен быть свой MainViewController для каждой цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...