2010-07-26 57 views
2

我有一个项目有几个目标。对于我的大多数课程,我可以使用一个.h文件并更改.m文件中的详细信息(为每个目标添加一个不同的.m文件)。如何为几个目标使用不同的.h文件?

对于我的一个UIViewController子类,我需要为不同的目标声明不同的UILabel IBOutlet(每个目标根据可用的内容显示不同的标签集)。问题是头文件不能作为目标。他们旁边没有复选框来指定目标成员资格。

我一直在处理这个问题的方法是为所有目标添加出口,并忽略未使用的目标。这看起来并不理想。

我是否需要为此使用标题构建阶段?处理这个问题的最好方法是什么?谢谢。

编辑:我应该提到我希望所有的.h文件具有相同的名称:PlaceViewController.h

+0

你提出的解决方案只会导致疯狂。您不应该像计划中那样使用多个名称相同的头文件,因为这可能会导致您在将来构建错误和维护问题。我建议为每个目标使用一个唯一命名的头文件,并根据预处理器指令包含正确的头文件,正如答案中所述。这将有助于你持久保持理智。 – 2010-07-26 18:32:39

回答

3

可以使用预处理器指令,以选择性地包含头文件。例如

#if TARGET_OS 
    #import "FirstTarget.h" 
#else 
    #import "SecondTarget.h" 
#endif 

您可以使用不同的目标不同的文件夹,如果头是命名相同:

#if TARGET_OS 
    #import "First/Target.h" 
#else 
    #import "Second/Target.h" 
#endif 

你可以阅读更多关于条件句here

+0

对不起,我应该说我想要标题具有相同的名称。 – 2010-07-26 17:57:47

+0

@nevan我已经更新了答案。 – Shaji 2010-07-26 18:03:29

1

标题不自己编译,但包含在其他文件中,然后编译。您可以在这些文件中使用条件编译来包含目标的正确标题。定义每个目标的预处理器符号的唯一的符号,并相应地包括相应的报头:

#if defined(TARGET_ONE) 
#include "HeaderOne.h" 
#elif defined(TARGET_TWO) 
#include "HeaderTwo.h" 
#endif 
+0

对不起,我应该说我希望我的所有标题具有相同的名称。我上面编辑了我的问题。 – 2010-07-26 17:58:15

+0

要做到这一点的唯一方法是将标题放在子目录中,然后更改每个目标的搜索路径以包含正确的子目录。尽管如此,这种方式仍然是疯狂的。我强烈建议不要做任何你想做的事情,并找出更好的方法。每个目标的单独文件(具有唯一名称)可能是一个很好的开始。 – 2010-07-26 18:25:16

0

我很抱歉要回答几年为时已晚,但最近我有同样的问题,并有一个办法做到这一点:

  • 比方说,你已经通过复制创建一个新的目标原来的目标。右键单击Project Navigator中的第一个(原始).h文件,然后在Finder中打开文件。
  • 在Xcode中,右键单击该文件并将其从项目中删除(仅删除引用,不要移至垃圾箱)。
  • 在Finder中,创建两个文件夹(在一个文件夹中不能有两个相同名称的文件),并在两个文件夹中移动/复制原始文件.h
  • 现在,拖放项目中某处的第一个文件夹,当弹出目标窗口时,只选择第一个目标。
  • 与第二个文件夹相同,只选择第二个目标。

Voilà,你现在应该有两个相同名字的.h文件。

注意事项:如果您的.h文件有NS_ENUM,似乎Xcode有随机问题。这可能是可以解决的,但我仍然没有想到。

相关问题