2010-03-21 47 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