iphone - 编译条件的标头

时间:2010-03-21 07:59:34

标签: iphone iphone-sdk-3.0

我有一个为两个目标生成应用程序的项目。

其中一个目标必须包含一个额外的委托协议,该协议不应出现在另一个协议上。所以,我在Xcode上创建了一个宏,并声明了这样的标题:

#ifdef TARGET_1
@interface myViewController : UIViewController <UIScrollViewDelegate, UIPopoverControllerDelegate>
#endif

#ifdef TARGET_2
@interface myViewController : UIViewController <UIScrollViewDelegate>
#endif

{ .... bla bla.... }

问题是Xcode讨厌@interface的这个“双重”声明,并且给了我各种错误。当我只提出其中一个声明时,错误消失了。

如何解决?谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

如果您正在进行重新清理,则必须定义两个符号。仔细检查您的TARGET_1和TARGET_2定义是否未定义

答案 1 :(得分:1)

我个人毫不犹豫地写下这样的话:

@interface myViewController : UIViewController <UIScrollViewDelegate
#ifdef TARGET_1
, UIPopoverControllerDelegate
#endif
>

看起来很难看,但我相信它更能反映出语义。

你甚至可以做得更好:

#ifndef TARGET_1
@protocol UIPopoverControllerDelegate
@end
#endif

@interface myViewController : UIViewController <UIScrollViewDelegate, UIPopoverControllerDelegate>

所有这些当然不会使之前的答案无效!