我有一个Xcode 4项目,可以构建两个不同的目标。我已经在构建设置中定义了一些常量,因此我可以为每个目标运行不同的代码,如下所示:
#ifdef VERSION1
// do this
#else
// do that
#endif
在应用程序的一个版本中,我需要主视图控制器打开另一个视图控制器并成为其委托,但另一个版本不使用该视图控制器,不应编译其代码或尝试成为其委托。我已经设置了主视图控制器头像:
#ifdef VERSION2
#import "SpecialViewController.h"
#endif
@interface MainViewController : UIViewController <MPMediaPickerControllerDelegate, SpecialViewControllerDelegate> {
// etc.
围绕#import标签的条件工作正常,但是如何在一个版本中将此类声明为SpecialViewControllerDelegate而不是另一个版本?
答案 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。