2010-07-26 60 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有隨機問題。這可能是可以解決的,但我仍然沒有想到。

相關問題