如何在接口声明中有条件地声明委托?

时间:2011-07-01 17:25:24

标签: objective-c ios ios4 delegates

我有一个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 个答案:

答案 0 :(得分:10)

只需使用#define预处理程序指令来更改版本之间的委托。 这是“VERSION2”的一个例子。

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

@interface MainViewController : UIViewController <ARGS>

答案 1 :(得分:1)

只要你没有分配代表,你就可以离开实现了。你在VERSION1中的SpecialViewController(如果你在V1中有一个SpecialViewController)将没有委托,所以它的调用将无处可去,这将导致没有副作用。

#ifdef VERSION2
specialViewController.delegate = self;
#endif

如果这种方法不起作用,几乎看起来你应该为每个目标使用不同的MainViewController。