2010-03-21 40 views
0

我有一个项目,生成两个目标的应用程序。iphone - 编译器条件的标头

其中一个目标必须包含另一个不应出现在另一个目标上的其他委托协议。所以,我创建了一个Xcode的宏观和声明如下标题:

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

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

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

的问题是,Xcode是恨@interface的这种“双重”的声明,并给了我所有的那种错误。当我只放一个声明时,错误就会消失。

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

+2

是否确定TARGET_1和TARGET_2不会同时为真? – kennytm 2010-03-21 08:01:19

+0

是的,只是其中一个是真的在一次 – SpaceDog 2010-03-21 08:06:49

+0

我发现了一个奇怪的事情,即使你没有使用其中一个,你也必须让所有PREPROCESSOR MACROS(发行版,发行版和调试版)充满目标名称。在我的情况下,我没有使用“发布”,其预处理器宏字段为空。 – SpaceDog 2010-03-21 08:13:36

回答

1

如果您要获得重新校正,那么您必须定义两个符号。仔细检查你的TARGET_1和TARGET_2定义没有被定义在一起

+0

谢谢!看到我对KennyTM的看法......太棒了。 – SpaceDog 2010-03-21 08:14:03

1

我个人不要犹豫,写类似:

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

它看起来丑陋,但我相信它更能反映语义。

你甚至可以做一个更好:

#ifndef TARGET_1 
@protocol UIPopoverControllerDelegate 
@end 
#endif 

@interface myViewController : UIViewController <UIScrollViewDelegate, UIPopoverControllerDelegate> 

所有这一切并不当然无效的以前的答案!

+0

谢谢!我每天都会与SO的大师学习新事物! – SpaceDog 2010-03-21 10:39:09