代码之家  ›  专栏  ›  技术社区  ›  Duck

iphone-编译器以头为条件

  •  0
  • Duck  · 技术社区  · 14 年前

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

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

    #ifdef TARGET_1
    @interface myViewController : UIViewController <UIScrollViewDelegate, UIPopoverControllerDelegate>
    #endif
    
    #ifdef TARGET_2
    @interface myViewController : UIViewController <UIScrollViewDelegate>
    #endif
    
    { .... bla bla.... }
    

    问题是Xcode讨厌@interface的“double”声明,并且给了我各种各样的错误。当我只放一个声明时,错误就消失了。

    如何解决这个问题?谢谢你的帮助。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Joshua Weinberg    14 年前

    如果你在那里得到了一个重新定义,你必须定义了这两个符号。再次检查目标1和目标2定义是否未一起定义

        2
  •  1
  •   Jean-Denis Muys    14 年前

    我个人毫不犹豫地写了这样的东西:

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

    它看起来很难看,但我相信它更好地反映了语义。

    你甚至可以做得更好:

    #ifndef TARGET_1
    @protocol UIPopoverControllerDelegate
    @end
    #endif
    
    @interface myViewController : UIViewController <UIScrollViewDelegate, UIPopoverControllerDelegate>
    

    当然,所有这些都不会使以前的答案失效!